Issue 1:
I have searched the issues of this repository and believe that this is not a duplicate.

I have checked the FAQ of this repository and believe that this is not a duplicate.

Environment

Dubbo version: 2.7.6

Operating System version: Mac os

Java version: 1.8

Steps to reproduce this issue

When I run the demo in org.apache.dubbo.demo.consumer.Application in debug mode, the console log was stoped here，and the thread seems dead.

then i use jstack to print thread trace.

2020-04-15 15:51:51
Full thread dump Java HotSpot(TM) 64-Bit Server VM (25.171-b11 mixed mode):

"Attach Listener" #12 daemon prio=9 os_prio=31 tid=0x00007fb6d392d000 nid=0xf07 waiting on condition [0x0000000000000000]
java.lang.Thread.State: RUNNABLE

"Service Thread" #11 daemon prio=9 os_prio=31 tid=0x00007fb6d3872000 nid=0x4503 runnable [0x0000000000000000]
java.lang.Thread.State: RUNNABLE

"C1 CompilerThread2" #10 daemon prio=9 os_prio=31 tid=0x00007fb6d30c5800 nid=0x4603 waiting on condition [0x0000000000000000]
java.lang.Thread.State: RUNNABLE

"C2 CompilerThread1" #9 daemon prio=9 os_prio=31 tid=0x00007fb6d30c5000 nid=0x3c03 waiting on condition [0x0000000000000000]
java.lang.Thread.State: RUNNABLE

"C2 CompilerThread0" #8 daemon prio=9 os_prio=31 tid=0x00007fb6d4062000 nid=0x3a03 waiting on condition [0x0000000000000000]
java.lang.Thread.State: RUNNABLE

"JDWP Command Reader" #7 daemon prio=10 os_prio=31 tid=0x00007fb6d3816000 nid=0x3803 runnable [0x0000000000000000]
java.lang.Thread.State: RUNNABLE

"JDWP Event Helper Thread" #6 daemon prio=10 os_prio=31 tid=0x00007fb6d4001000 nid=0x4903 runnable [0x0000000000000000]
java.lang.Thread.State: RUNNABLE

"JDWP Transport Listener: dt_socket" #5 daemon prio=10 os_prio=31 tid=0x00007fb6d3813000 nid=0x3607 runnable [0x0000000000000000]
java.lang.Thread.State: RUNNABLE

"Signal Dispatcher" #4 daemon prio=9 os_prio=31 tid=0x00007fb6d3052800 nid=0x4b03 runnable [0x0000000000000000]
java.lang.Thread.State: RUNNABLE

"Finalizer" #3 daemon prio=8 os_prio=31 tid=0x00007fb6d380e800 nid=0x3003 in Object.wait() [0x0000700001be7000]
java.lang.Thread.State: WAITING (on object monitor)
at java.lang.Object.wait(Native Method)
- waiting on <0x0000000795588ed0> (a java.lang.ref.ReferenceQueue$Lock)
at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:143)
- locked <0x0000000795588ed0> (a java.lang.ref.ReferenceQueue$Lock)
at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:164)
at java.lang.ref.Finalizer$FinalizerThread.run(Finalizer.java:212)

"Reference Handler" #2 daemon prio=10 os_prio=31 tid=0x00007fb6d2803000 nid=0x5103 in Object.wait() [0x0000700001ae4000]
java.lang.Thread.State: WAITING (on object monitor)
at java.lang.Object.wait(Native Method)
- waiting on <0x0000000795586bf8> (a java.lang.ref.Reference$Lock)
at java.lang.Object.wait(Object.java:502)
at java.lang.ref.Reference.tryHandlePending(Reference.java:191)
- locked <0x0000000795586bf8> (a java.lang.ref.Reference$Lock)
at java.lang.ref.Reference$ReferenceHandler.run(Reference.java:153)

"main" #1 prio=5 os_prio=31 tid=0x00007fb6d3804000 nid=0x1703 runnable [0x00007000014d1000]
java.lang.Thread.State: RUNNABLE
at java.util.concurrent.ConcurrentHashMap.computeIfAbsent(ConcurrentHashMap.java:1718)
at org.apache.dubbo.common.extension.ExtensionLoader.getExtensionLoader(ExtensionLoader.java:144)
at org.apache.dubbo.common.extension.ExtensionLoader.<init>(ExtensionLoader.java:125)
at org.apache.dubbo.common.extension.ExtensionLoader.lambda$getExtensionLoader$3(ExtensionLoader.java:144)
at org.apache.dubbo.common.extension.ExtensionLoader$$Lambda$5/1354011814.apply(Unknown Source)
at java.util.concurrent.ConcurrentHashMap.computeIfAbsent(ConcurrentHashMap.java:1660)
- locked <0x0000000796a693c8> (a java.util.concurrent.ConcurrentHashMap$ReservationNode)
at org.apache.dubbo.common.extension.ExtensionLoader.getExtensionLoader(ExtensionLoader.java:144)
at org.apache.dubbo.config.ReferenceConfig.<clinit>(ReferenceConfig.java:105)
at org.apache.dubbo.demo.consumer.Application.runWithRefer(Application.java:65)
at org.apache.dubbo.demo.consumer.Application.main(Application.java:32)

"VM Thread" os_prio=31 tid=0x00007fb6d3046800 nid=0x5303 runnable

"GC task thread#0 (ParallelGC)" os_prio=31 tid=0x00007fb6d2802800 nid=0x1f07 runnable

"GC task thread#1 (ParallelGC)" os_prio=31 tid=0x00007fb6d380c800 nid=0x2a03 runnable

"GC task thread#2 (ParallelGC)" os_prio=31 tid=0x00007fb6d380d800 nid=0x2c03 runnable

"GC task thread#3 (ParallelGC)" os_prio=31 tid=0x00007fb6d380e000 nid=0x2e03 runnable

"VM Periodic Task Thread" os_prio=31 tid=0x00007fb6d30c8800 nid=0x4303 waiting on condition

JNI global references: 3348

the main thread was blocked when call ConcurrentHashMap.computeIfAbsent in ExtensionLoader.getExtensionLoader

then i step into method computeIfAbsent and found that this condition is false

that means the root node in current bin is an ReservationNode, it only occurs when current node is computing and not finished.

then i found that the method computeIfAbsent was called twice in the context, and the second call was called by the first calling.

and each time, the entry was supposed to put in the same bin.

so the second call would stuck in a dead loop.

Then i saw the code in ExtensionLoader.getExtensionLoader(Class type), it will create a new ExtensionLoader when the target type can't be found in EXTENSION_LOADERS, and when call ExtensionLoader's instructor, it will create a ExtensionFactory object, and that will call getExtensionLoader again, so that is the reason why there is 2 calling of computeIfAbsent.

so maybe you can replace the code in line 145 by the code in 147 to 148

Issue 2:
I have searched the issues of this repository and believe that this is not a duplicate.

I have checked the FAQ of this repository and believe that this is not a duplicate.

Environment

Dubbo version: 2.7.1

Operating System version: macos

Java version: 1.8

Steps to reproduce this issue

目前元数据上报至元数据中心的参数维度不能够满足我的业务，所以想扩展元数据来实现一些个性化参数的上报，以便于其他消费者或网关更好的使用一些特殊场景？