Comments (26)
Thank you for collaborate with the project giving us feedback!!' You will help us a lot if you can attach and example AVRO and an example Test Plan in order to be able to reproduce the error. If that is the case. Cheers
from kloadgen.
I checked the logs of my schema-registry server:
- In
Schema Registry Config Element
, whenTest Registry
button is clicked, my schema-registry server's log shows:
[2020-10-10 13:50:37,800] INFO 172.18.0.1 - - [10/Oct/2020:13:50:37 +0000] "GET /subjects HTTP/1.1" 200 39 6 (io.confluent.rest-utils.requests)
When this HTTP request is sent from browser, the result shows:
- In
Kafka Load Generator Config
, whenLoad Subjects
is clicked, my schema-registry server's log shows:
[2020-10-10 13:52:41,543] INFO 172.18.0.1 - - [10/Oct/2020:13:52:41 +0000] "GET /subjects/<DEFAULT>/versions/latest HTTP/1.1" 404 51 8 (io.confluent.rest-utils.requests)
When this HTTP request is sent from browser, the result shows:
The Subject Name
dropdown only shows <DEFAULT>
, no actual subject available as options. How to make the subject retrieved in step (1) appears as option here?
from kloadgen.
Hi @shuwn Yuan,
that's a great investigation job!!
it looks like a bug to me.
I'll handle it and will provide fix in a branch.
I'll let you know asap.
Cheers!!
from kloadgen.
@kszosze Thanks for your reply, looking forward for the fix 🙏 🎉
from kloadgen.
Hi @shuwnyuantee,
There is an small fix in the branch, can you please try it and see if that solves your issue?
Cheers!
from kloadgen.
@kszosze Thanks for your fix, the subject names are loaded properly now 🙏 🎉
But I run into another error, when my AVRO schema contains nested field types, eg: map of string, array of string, and array of map.
I attach full details here for your reference:
- AVRO schema file with nested field types (the file extension is renamed to
.avsc.txt
as I can't upload.avsc
file here)
- When the schema is loaded from Schema Registry, the field types look like:
- For Java Request, I have selected
net.coru.kloadgen.sampler.ConfluentKafkaSampler
- Error message from JMeter log (complain about union-map ...):
from kloadgen.
Hi @shuwnyuantee,
glad to hear first issue was fixes, I'll merge it and will take a look to the second one.
Nested types are a bit of a headache.
Cheers!!
from kloadgen.
Hi @shuwnyuantee,
I took a look into this avro file, and, that make sense? having an optional map with optional values? Syntactically is correct, but logically make any sense? Do you really need that to be supported?
Cheers!!
from kloadgen.
@kszosze yes, I need those nested fields types to be supported.
My actual AVRO schema contains many other fields, where most of them are simple field types, eg: string, int, long, boolean.
What I have attached previously, is the simplified schema which only contains nested fields that aren't currently supported in your plugin.
from kloadgen.
Hi @shuwnyuantee,
I added some code to support those embedded types. Can you please test if the branch suits your needs?
Regards!!
from kloadgen.
@kszosze Thanks for your fix & here's what I encounter:
- Here's my config in
Kafka Load Generator Config
.
It works for string-map
.
But for string-array
& string-map-array
, they are always sent as null
. Here's a sample message that is read from my kafka broker:
{"mapOfString": {"map": {"k1": {"string": "v1"}, "k2": {"string": "v2"}, "k3": {"string": "v3"}, "k4": {"string": "v4"}, "k5": {"string": "v5"}}}, "arrayOfString": null, "arrayOfMap": null}
How to configure array size of string-array
& string-map-array
? Note I have already set the number inside brackets in Field Name
(but not working) :
arrayOfString[2]
arrayOfMap[3]
- What is
Field Length
means for these 3 field types? When I try to set them, it throws the below error. Afterwards the interface is no longer responding, it keeps throwing errors.
2020-10-14 20:55:33,729 ERROR o.a.j.r.Functor: Can't find method net.coru.kloadgen.model.FieldValueMapping#setValueLength(java.lang.String)
java.lang.Throwable: null
at org.apache.jorphan.reflect.Functor.doInvoke(Functor.java:255) [jorphan.jar:5.3]
at org.apache.jorphan.reflect.Functor.invoke(Functor.java:322) [jorphan.jar:5.3]
at org.apache.jorphan.gui.ObjectTableModel.setValueAt(ObjectTableModel.java:224) [jorphan.jar:5.3]
at javax.swing.JTable.setValueAt(JTable.java:2741) [?:1.8.0_131]
at javax.swing.JTable.editingStopped(JTable.java:4723) [?:1.8.0_131]
at javax.swing.AbstractCellEditor.fireEditingStopped(AbstractCellEditor.java:141) [?:1.8.0_131]
at javax.swing.DefaultCellEditor$EditorDelegate.stopCellEditing(DefaultCellEditor.java:368) [?:1.8.0_131]
at javax.swing.DefaultCellEditor.stopCellEditing(DefaultCellEditor.java:233) [?:1.8.0_131]
at com.github.weisj.darklaf.ui.table.DarkTableCellEditor.stopCellEditing(DarkTableCellEditor.java:222) [darklaf-core-2.1.1.jar:2.1.1]
at com.github.weisj.darklaf.ui.table.TableUIBridge$Handler.mousePressed(TableUIBridge.java:1928) [darklaf-core-2.1.1.jar:2.1.1]
at com.github.weisj.darklaf.ui.table.DarkTableUI$DarkHandler.mousePressed(DarkTableUI.java:482) [darklaf-core-2.1.1.jar:2.1.1]
at java.awt.AWTEventMulticaster.mousePressed(AWTEventMulticaster.java:280) [?:1.8.0_131]
at java.awt.Component.processMouseEvent(Component.java:6530) [?:1.8.0_131]
at javax.swing.JComponent.processMouseEvent(JComponent.java:3324) [?:1.8.0_131]
at java.awt.Component.processEvent(Component.java:6298) [?:1.8.0_131]
at java.awt.Container.processEvent(Container.java:2236) [?:1.8.0_131]
at java.awt.Component.dispatchEventImpl(Component.java:4889) [?:1.8.0_131]
at java.awt.Container.dispatchEventImpl(Container.java:2294) [?:1.8.0_131]
at java.awt.Component.dispatchEvent(Component.java:4711) [?:1.8.0_131]
at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4888) [?:1.8.0_131]
at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4522) [?:1.8.0_131]
at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4466) [?:1.8.0_131]
at java.awt.Container.dispatchEventImpl(Container.java:2280) [?:1.8.0_131]
at java.awt.Window.dispatchEventImpl(Window.java:2746) [?:1.8.0_131]
at java.awt.Component.dispatchEvent(Component.java:4711) [?:1.8.0_131]
at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:758) [?:1.8.0_131]
at java.awt.EventQueue.access$500(EventQueue.java:97) [?:1.8.0_131]
at java.awt.EventQueue$3.run(EventQueue.java:709) [?:1.8.0_131]
at java.awt.EventQueue$3.run(EventQueue.java:703) [?:1.8.0_131]
at java.security.AccessController.doPrivileged(Native Method) ~[?:1.8.0_131]
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:80) [?:1.8.0_131]
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:90) [?:1.8.0_131]
at java.awt.EventQueue$4.run(EventQueue.java:731) [?:1.8.0_131]
at java.awt.EventQueue$4.run(EventQueue.java:729) [?:1.8.0_131]
at java.security.AccessController.doPrivileged(Native Method) ~[?:1.8.0_131]
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:80) [?:1.8.0_131]
at java.awt.EventQueue.dispatchEvent(EventQueue.java:728) [?:1.8.0_131]
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:201) [?:1.8.0_131]
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116) [?:1.8.0_131]
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:105) [?:1.8.0_131]
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101) [?:1.8.0_131]
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93) [?:1.8.0_131]
at java.awt.EventDispatchThread.run(EventDispatchThread.java:82) [?:1.8.0_131]
2020-10-14 20:55:33,736 ERROR o.a.j.JMeter: Uncaught exception in thread Thread[AWT-EventQueue-0,6,main]
org.apache.jorphan.util.JMeterError: Can't find method net.coru.kloadgen.model.FieldValueMapping#setValueLength(java.lang.String)
at org.apache.jorphan.reflect.Functor.doInvoke(Functor.java:256) ~[jorphan.jar:5.3]
at org.apache.jorphan.reflect.Functor.invoke(Functor.java:322) ~[jorphan.jar:5.3]
at org.apache.jorphan.gui.ObjectTableModel.setValueAt(ObjectTableModel.java:224) ~[jorphan.jar:5.3]
at javax.swing.JTable.setValueAt(JTable.java:2741) ~[?:1.8.0_131]
at javax.swing.JTable.editingStopped(JTable.java:4723) ~[?:1.8.0_131]
at javax.swing.AbstractCellEditor.fireEditingStopped(AbstractCellEditor.java:141) ~[?:1.8.0_131]
at javax.swing.DefaultCellEditor$EditorDelegate.stopCellEditing(DefaultCellEditor.java:368) ~[?:1.8.0_131]
at javax.swing.DefaultCellEditor.stopCellEditing(DefaultCellEditor.java:233) ~[?:1.8.0_131]
at com.github.weisj.darklaf.ui.table.DarkTableCellEditor.stopCellEditing(DarkTableCellEditor.java:222) ~[darklaf-core-2.1.1.jar:2.1.1]
at com.github.weisj.darklaf.ui.table.TableUIBridge$Handler.mousePressed(TableUIBridge.java:1928) ~[darklaf-core-2.1.1.jar:2.1.1]
at com.github.weisj.darklaf.ui.table.DarkTableUI$DarkHandler.mousePressed(DarkTableUI.java:482) ~[darklaf-core-2.1.1.jar:2.1.1]
at java.awt.AWTEventMulticaster.mousePressed(AWTEventMulticaster.java:280) ~[?:1.8.0_131]
at java.awt.Component.processMouseEvent(Component.java:6530) ~[?:1.8.0_131]
at javax.swing.JComponent.processMouseEvent(JComponent.java:3324) ~[?:1.8.0_131]
at java.awt.Component.processEvent(Component.java:6298) ~[?:1.8.0_131]
at java.awt.Container.processEvent(Container.java:2236) ~[?:1.8.0_131]
at java.awt.Component.dispatchEventImpl(Component.java:4889) ~[?:1.8.0_131]
at java.awt.Container.dispatchEventImpl(Container.java:2294) ~[?:1.8.0_131]
at java.awt.Component.dispatchEvent(Component.java:4711) ~[?:1.8.0_131]
at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4888) ~[?:1.8.0_131]
at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4522) ~[?:1.8.0_131]
at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4466) ~[?:1.8.0_131]
at java.awt.Container.dispatchEventImpl(Container.java:2280) ~[?:1.8.0_131]
at java.awt.Window.dispatchEventImpl(Window.java:2746) ~[?:1.8.0_131]
at java.awt.Component.dispatchEvent(Component.java:4711) ~[?:1.8.0_131]
at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:758) ~[?:1.8.0_131]
at java.awt.EventQueue.access$500(EventQueue.java:97) ~[?:1.8.0_131]
at java.awt.EventQueue$3.run(EventQueue.java:709) ~[?:1.8.0_131]
at java.awt.EventQueue$3.run(EventQueue.java:703) ~[?:1.8.0_131]
at java.security.AccessController.doPrivileged(Native Method) ~[?:1.8.0_131]
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:80) ~[?:1.8.0_131]
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:90) ~[?:1.8.0_131]
at java.awt.EventQueue$4.run(EventQueue.java:731) ~[?:1.8.0_131]
at java.awt.EventQueue$4.run(EventQueue.java:729) ~[?:1.8.0_131]
at java.security.AccessController.doPrivileged(Native Method) ~[?:1.8.0_131]
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:80) ~[?:1.8.0_131]
at java.awt.EventQueue.dispatchEvent(EventQueue.java:728) ~[?:1.8.0_131]
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:201) [?:1.8.0_131]
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116) [?:1.8.0_131]
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:105) [?:1.8.0_131]
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101) [?:1.8.0_131]
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93) [?:1.8.0_131]
at java.awt.EventDispatchThread.run(EventDispatchThread.java:82) [?:1.8.0_131]
from kloadgen.
Hi @shuwnyuantee,
that is odd, I tested with a full example before commit and add your previous txt file in our tests.
I'll take a look later.
About the array/map size, the value should be in the first attribute it shown, between the [], as you did. So it will generate as many array elements as you indicate there. The value length is used by the Random Engine to calculate values not "bigger than " the value specified. For example, you define something like
| property 1 | string | 10 | [] |
so it will generate string no longer than 10 characters.
Otherwise if you it with other types, like the numerics
| property 1 | integer | 5 | [] |
it will generate numbers between 0 and 9999 (inclusives)
If you combine the 2 ways like
| property [3] | integer | 5 | [] |
It will generate an array of 3 elements with randome numbers between 0 and 9999(inclusive)
something like property = [50,100,1300]
if you define an array of objets like
| property[3].id | integer | 5 | [] |
| property[].name | string | 5 | [] |
| property[].qty | float | 3 | [] |
You will get an array of 3 objects which internal properties will be define by the FieldLength column, something like
property: [
{id:1000, name="rfthy", qty:34.0},
{id:560, name="mfhey", qty:14.6},
{id:99, name="qazsw", qty:89.4}
]
Hope that explanation help you to understand how it works.
Seeing your example, if you define a map/array size and some values in the field value column, instead of generate the random values from the Random Engine, it will took the samples from that list, randomly.
If you need to specify a list of 4 elements in a certain order and so, the best approach is use the array/map size empty and use Jmeter variables in the Field Value place as ${myvariable}
and generate them in a pre-processor step.
Cheers
from kloadgen.
@kszosze Thanks for your explanation.
- I would like to generate
string-map
field type like below.
"mapOfString":{
"map":{
"id":{
"string":"308414936"
},
"legacyId":{
"string":"881316"
}
}
}
How do I specify this in Kafka Load Generator Config
for Field Name / Type / Length / Values List ?
I need the map to always contain 2 fixed keys: id, legacyId
.
For their values, how do I specify a list so it can be picked up randomly, for both id
& legacyid
respectively?
Can you give an example for this use case?
-
You mentioned about using jmeter preprocessor & use it in
Field Values List
. Can you provide example for above use case too? If the values for keyid, legacyId
were to load from jmeter variables from preprocessor. -
I encounter quite some crash, sometimes clicked on
run
, it runs indefinitely & can't be stopped. It didn't show any error but seems like something crashed & can't be interrupted. Restart JMeter is the only way to interrupt it.
Is your plugin compatible with JMeter 5.3? Or should I use other supported version?
from kloadgen.
Hi @shuwnyuantee,
I'll provide JMX file in the next commit and I'll edit the avsc so you can get this type of object for the point 1.
related to the point 2 it will be covered in the example point 1.
Related to the 3, yes is a bug I'm solving right now.
Cheers
from kloadgen.
Hi @shuwnyuantee,
Fix had been uploaded, and a new Example test with variable generation and substitution.
Hope now you can perform the test you require.
Cheers!!
from kloadgen.
@kszosze I tried building package with your latest code, the build failed with test failures:
- I build your package inside a docker container (debian:9). Here's my docker container environment:
root@2254c32310c1:/code/kloadgen# cat /etc/*release
PRETTY_NAME="Debian GNU/Linux 9 (stretch)"
NAME="Debian GNU/Linux"
VERSION_ID="9"
VERSION="9 (stretch)"
VERSION_CODENAME=stretch
ID=debian
HOME_URL="https://www.debian.org/"
SUPPORT_URL="https://www.debian.org/support"
BUG_REPORT_URL="https://bugs.debian.org/"
root@2254c32310c1:/code/kloadgen#
root@2254c32310c1:/code/kloadgen# cat /proc/version
Linux version 4.19.76-linuxkit (root@4abe09437d05) (gcc version 8.3.0 (Alpine 8.3.0)) #1 SMP Tue May 26 11:42:35 UTC 2020
root@2254c32310c1:/code/kloadgen# cat /etc/debian_version
9.13
root@2254c32310c1:/code/kloadgen# java -version
openjdk version "1.8.0_265"
OpenJDK Runtime Environment (build 1.8.0_265-8u265-b01-0+deb9u1-b01)
OpenJDK 64-Bit Server VM (build 25.265-b01, mixed mode)
root@2254c32310c1:/code/kloadgen# mvn -version
Apache Maven 3.3.9
Maven home: /usr/share/maven
Java version: 1.8.0_265, vendor: Oracle Corporation
Java home: /usr/lib/jvm/java-8-openjdk-amd64/jre
Default locale: en_US, platform encoding: ANSI_X3.4-1968
OS name: "linux", version: "4.19.76-linuxkit", arch: "amd64", family: "unix"
- build error
Oct 15, 2020 3:29:07 AM ru.lanwen.wiremock.ext.WiremockResolver afterEach
INFO: Stopping wiremock server on localhost:38477
Oct 15, 2020 3:29:07 AM org.eclipse.jetty.server.AbstractConnector doStop
INFO: Stopped NetworkTrafficServerConnector@48c40605{HTTP/1.1}{0.0.0.0:0}
Oct 15, 2020 3:29:07 AM org.eclipse.jetty.server.handler.ContextHandler doStop
INFO: Stopped o.e.j.s.ServletContextHandler@770d0ea6{/,null,UNAVAILABLE}
Oct 15, 2020 3:29:07 AM org.eclipse.jetty.server.handler.ContextHandler doStop
INFO: Stopped o.e.j.s.ServletContextHandler@24f360b2{/__admin,null,UNAVAILABLE}
Oct 15, 2020 3:29:07 AM org.eclipse.jetty.util.thread.QueuedThreadPool doStop
WARNING: qtp1895479349{STOPPING,8<=8<=14,i=4,q=6} Couldn't stop Thread[qtp1895479349-78,5,main]
Oct 15, 2020 3:29:07 AM org.eclipse.jetty.util.thread.QueuedThreadPool doStop
WARNING: qtp1895479349{STOPPING,8<=8<=14,i=3,q=5} Couldn't stop Thread[qtp1895479349-88,5,main]
Oct 15, 2020 3:29:07 AM org.eclipse.jetty.util.thread.QueuedThreadPool doStop
WARNING: qtp1895479349{STOPPING,8<=8<=14,i=3,q=5} Couldn't stop Thread[qtp1895479349-85,5,main]
[INFO] Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.108 s - in net.coru.kloadgen.loadgen.impl.AvroLoadGeneratorTest
[INFO] Running net.coru.kloadgen.processor.AvroSchemaProcessorTest
Oct 15, 2020 3:29:07 AM org.apache.jmeter.util.JMeterUtils setLocale
INFO: Setting Locale to en
Oct 15, 2020 3:29:07 AM org.eclipse.jetty.server.Server doStart
INFO: jetty-9.2.28.v20190418
Oct 15, 2020 3:29:07 AM org.eclipse.jetty.server.handler.ContextHandler doStart
INFO: Started o.e.j.s.ServletContextHandler@6bc248ed{/__admin,null,AVAILABLE}
Oct 15, 2020 3:29:07 AM org.eclipse.jetty.server.handler.ContextHandler doStart
INFO: Started o.e.j.s.ServletContextHandler@70ab80e3{/,null,AVAILABLE}
Oct 15, 2020 3:29:07 AM org.eclipse.jetty.server.AbstractConnector doStart
INFO: Started NetworkTrafficServerConnector@9573b3b{HTTP/1.1}{0.0.0.0:41473}
Oct 15, 2020 3:29:07 AM org.eclipse.jetty.server.Server doStart
INFO: Started @5737ms
Oct 15, 2020 3:29:07 AM ru.lanwen.wiremock.ext.WiremockResolver resolveParameter
INFO: Started wiremock server on localhost:41473
Oct 15, 2020 3:29:07 AM ru.lanwen.wiremock.ext.WiremockResolver afterEach
INFO: Stopping wiremock server on localhost:41473
Oct 15, 2020 3:29:07 AM org.eclipse.jetty.server.AbstractConnector doStop
INFO: Stopped NetworkTrafficServerConnector@9573b3b{HTTP/1.1}{0.0.0.0:0}
Oct 15, 2020 3:29:07 AM org.eclipse.jetty.server.handler.ContextHandler doStop
INFO: Stopped o.e.j.s.ServletContextHandler@70ab80e3{/,null,UNAVAILABLE}
Oct 15, 2020 3:29:07 AM org.eclipse.jetty.server.handler.ContextHandler doStop
INFO: Stopped o.e.j.s.ServletContextHandler@6bc248ed{/__admin,null,UNAVAILABLE}
Oct 15, 2020 3:29:07 AM org.eclipse.jetty.util.thread.QueuedThreadPool doStop
WARNING: qtp896852376{STOPPING,8<=8<=14,i=8,q=8} Couldn't stop Thread[qtp896852376-92,5,main]
Oct 15, 2020 3:29:07 AM org.eclipse.jetty.util.thread.QueuedThreadPool doStop
WARNING: qtp896852376{STOPPING,8<=8<=14,i=6,q=7} Couldn't stop Thread[qtp896852376-100,5,main]
Oct 15, 2020 3:29:07 AM org.eclipse.jetty.util.thread.QueuedThreadPool doStop
WARNING: qtp896852376{STOPPING,8<=8<=14,i=5,q=7} Couldn't stop Thread[qtp896852376-93,5,main]
Oct 15, 2020 3:29:07 AM org.eclipse.jetty.util.thread.QueuedThreadPool doStop
WARNING: qtp896852376{STOPPING,8<=8<=14,i=2,q=7} Couldn't stop Thread[qtp896852376-99,5,main]
Oct 15, 2020 3:29:07 AM org.eclipse.jetty.util.thread.QueuedThreadPool doStop
WARNING: qtp896852376{STOPPING,8<=8<=14,i=1,q=7} Couldn't stop Thread[qtp896852376-91,5,]
Oct 15, 2020 3:29:07 AM org.apache.jmeter.util.JMeterUtils setLocale
INFO: Setting Locale to en
Oct 15, 2020 3:29:07 AM org.eclipse.jetty.server.Server doStart
INFO: jetty-9.2.28.v20190418
Oct 15, 2020 3:29:07 AM org.eclipse.jetty.server.handler.ContextHandler doStart
INFO: Started o.e.j.s.ServletContextHandler@41394595{/__admin,null,AVAILABLE}
Oct 15, 2020 3:29:07 AM org.eclipse.jetty.server.handler.ContextHandler doStart
INFO: Started o.e.j.s.ServletContextHandler@5769e7ae{/,null,AVAILABLE}
Oct 15, 2020 3:29:07 AM org.eclipse.jetty.server.AbstractConnector doStart
INFO: Started NetworkTrafficServerConnector@5c77053b{HTTP/1.1}{0.0.0.0:35247}
Oct 15, 2020 3:29:07 AM org.eclipse.jetty.server.Server doStart
INFO: Started @5851ms
Oct 15, 2020 3:29:07 AM ru.lanwen.wiremock.ext.WiremockResolver resolveParameter
INFO: Started wiremock server on localhost:35247
Oct 15, 2020 3:29:07 AM ru.lanwen.wiremock.ext.WiremockResolver afterEach
INFO: Stopping wiremock server on localhost:35247
Oct 15, 2020 3:29:07 AM org.eclipse.jetty.server.AbstractConnector doStop
INFO: Stopped NetworkTrafficServerConnector@5c77053b{HTTP/1.1}{0.0.0.0:0}
Oct 15, 2020 3:29:07 AM org.eclipse.jetty.server.handler.ContextHandler doStop
INFO: Stopped o.e.j.s.ServletContextHandler@5769e7ae{/,null,UNAVAILABLE}
Oct 15, 2020 3:29:07 AM org.eclipse.jetty.server.handler.ContextHandler doStop
INFO: Stopped o.e.j.s.ServletContextHandler@41394595{/__admin,null,UNAVAILABLE}
Oct 15, 2020 3:29:07 AM org.eclipse.jetty.util.thread.QueuedThreadPool doStop
WARNING: qtp1443173326{STOPPING,8<=8<=14,i=7,q=6} Couldn't stop Thread[qtp1443173326-111,5,main]
Oct 15, 2020 3:29:07 AM org.eclipse.jetty.util.thread.QueuedThreadPool doStop
WARNING: qtp1443173326{STOPPING,8<=8<=14,i=4,q=5} Couldn't stop Thread[qtp1443173326-112,5,]
Oct 15, 2020 3:29:07 AM org.eclipse.jetty.util.thread.QueuedThreadPool doStop
WARNING: qtp1443173326{STOPPING,8<=8<=14,i=1,q=3} Couldn't stop Thread[qtp1443173326-102,5,]
Oct 15, 2020 3:29:07 AM org.eclipse.jetty.util.thread.QueuedThreadPool doStop
WARNING: qtp1443173326{STOPPING,8<=8<=14,i=0,q=2} Couldn't stop Thread[qtp1443173326-103,5,]
[ERROR] Tests run: 2, Failures: 1, Errors: 0, Skipped: 0, Time elapsed: 0.207 s <<< FAILURE! - in net.coru.kloadgen.processor.AvroSchemaProcessorTest
[ERROR] textAvroSchemaProcessorArrayMap{WireMockServer} Time elapsed: 0.101 s <<< FAILURE!
java.lang.AssertionError:
Expecting:
<[{"IxFj"="Adrb", "n"="1", "t"="2"},
{"epyO"="IjOQ", "n"="1", "t"="2"},
{"n"="1", "oeIy"="YaJc", "t"="2"},
{"LpPf"="LAeM", "n"="1", "t"="2"}]>
to contain:
<[{"n"="1", "t"="2"}, {"n"="1", "t"="2"}]>
but could not find:
<[{"n"="1", "t"="2"}]>
at net.coru.kloadgen.processor.AvroSchemaProcessorTest.textAvroSchemaProcessorArrayMap(AvroSchemaProcessorTest.java:110)
[INFO] Running net.coru.kloadgen.util.AvroRandomToolTest
[INFO] Tests run: 28, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.061 s - in net.coru.kloadgen.util.AvroRandomToolTest
[INFO] Running net.coru.kloadgen.util.RandomToolTest
[INFO] Tests run: 36, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.073 s - in net.coru.kloadgen.util.RandomToolTest
[INFO] Running net.coru.kloadgen.util.StatelessRandomToolTest
[INFO] Tests run: 23, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.044 s - in net.coru.kloadgen.util.StatelessRandomToolTest
[INFO]
[INFO] Results:
[INFO]
[ERROR] Failures:
[ERROR] AvroSchemaProcessorTest.textAvroSchemaProcessorArrayMap:110
Expecting:
<[{"IxFj"="Adrb", "n"="1", "t"="2"},
{"epyO"="IjOQ", "n"="1", "t"="2"},
{"n"="1", "oeIy"="YaJc", "t"="2"},
{"LpPf"="LAeM", "n"="1", "t"="2"}]>
to contain:
<[{"n"="1", "t"="2"}, {"n"="1", "t"="2"}]>
but could not find:
<[{"n"="1", "t"="2"}]>
[INFO]
[ERROR] Tests run: 108, Failures: 1, Errors: 0, Skipped: 0
[INFO]
[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 17.858 s
[INFO] Finished at: 2020-10-15T03:29:08+00:00
[INFO] Final Memory: 40M/644M
[INFO] ------------------------------------------------------------------------
[ERROR] Failed to execute goal org.apache.maven.plugins:maven-surefire-plugin:2.22.2:test (default-test) on project kloadgen: There are test failures.
[ERROR]
[ERROR] Please refer to /code/kloadgen/target/surefire-reports for the individual test results.
[ERROR] Please refer to dump files (if any exist) [date].dump, [date]-jvmRun[N].dump and [date].dumpstream.
[ERROR] -> [Help 1]
org.apache.maven.lifecycle.LifecycleExecutionException: Failed to execute goal org.apache.maven.plugins:maven-surefire-plugin:2.22.2:test (default-test) on project kloadgen: There are test failures.
Please refer to /code/kloadgen/target/surefire-reports for the individual test results.
Please refer to dump files (if any exist) [date].dump, [date]-jvmRun[N].dump and [date].dumpstream.
at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:212)
at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:153)
at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:145)
at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:116)
at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:80)
at org.apache.maven.lifecycle.internal.builder.singlethreaded.SingleThreadedBuilder.build(SingleThreadedBuilder.java:51)
at org.apache.maven.lifecycle.internal.LifecycleStarter.execute(LifecycleStarter.java:128)
at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:307)
at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:193)
at org.apache.maven.DefaultMaven.execute(DefaultMaven.java:106)
at org.apache.maven.cli.MavenCli.execute(MavenCli.java:863)
at org.apache.maven.cli.MavenCli.doMain(MavenCli.java:288)
at org.apache.maven.cli.MavenCli.main(MavenCli.java:199)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced(Launcher.java:289)
at org.codehaus.plexus.classworlds.launcher.Launcher.launch(Launcher.java:229)
at org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode(Launcher.java:415)
at org.codehaus.plexus.classworlds.launcher.Launcher.main(Launcher.java:356)
Caused by: org.apache.maven.plugin.MojoFailureException: There are test failures.
Please refer to /code/kloadgen/target/surefire-reports for the individual test results.
Please refer to dump files (if any exist) [date].dump, [date]-jvmRun[N].dump and [date].dumpstream.
at org.apache.maven.plugin.surefire.SurefireHelper.throwException(SurefireHelper.java:289)
at org.apache.maven.plugin.surefire.SurefireHelper.reportExecution(SurefireHelper.java:161)
at org.apache.maven.plugin.surefire.SurefirePlugin.handleSummary(SurefirePlugin.java:364)
at org.apache.maven.plugin.surefire.AbstractSurefireMojo.executeAfterPreconditionsChecked(AbstractSurefireMojo.java:1041)
at org.apache.maven.plugin.surefire.AbstractSurefireMojo.execute(AbstractSurefireMojo.java:857)
at org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo(DefaultBuildPluginManager.java:134)
at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:207)
... 20 more
[ERROR]
[ERROR]
[ERROR] For more information about the errors and possible solutions, please read the following articles:
[ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/MojoFailureException
from kloadgen.
Hi @shuwnyuantee
that is right, my apologize. A last minute change fixing the bug and that test remain unchanged. Now it should build ok. At least for me it's building.
Answering a previous question you made, I tested with jmeter 5.3 and I haven't any problem. I'm also building with Java 8+ and no complains so far.
My apologizes for the failing build.
Cheers!
from kloadgen.
@kszosze Thanks for fixing the test, I am able to compile it successfully 🎉 👍
I have tested & verified the below:
- Kafka messages can be successfully generated with these field types:
string-map
string-array
string-map-array
- variable substitution with preprocessor is working fine.
Thanks a lot for your help & great work 🙏 👍
But I have a minor request here, related to schema's subject name registered with schema registry.
Below are some details for my test case:
Note that I'm loading the existing schema from schema registry. The schema subject name is test-10-value
.
Note my setting:
kafka.topic.name : test-10
auto.register.schemas : true
If auto.register.schemas
is set to false
, it throws error:
2020-10-16 22:42:23,175 ERROR n.c.k.s.ConfluentKafkaSampler: Failed to send message
org.apache.kafka.common.errors.SerializationException: Error retrieving Avro schema: {"type":"record","name":"click","fields":[{"name":"mapOfString","type":["null",{"type":"map","values":["null","string"]}],"default":null},{"name":"arrayOfString","type":["null",{"type":"array","items":"string"}],"default":null},{"name":"arrayOfMap","type":["null",{"type":"array","items":{"type":"map","values":["null","string"]}}],"default":null}]}
Caused by: io.confluent.kafka.schemaregistry.client.rest.exceptions.RestClientException: Subject not found.; error code: 40401
at io.confluent.kafka.schemaregistry.client.rest.RestService.sendHttpRequest(RestService.java:230) ~[kloadgen-plugin-2.1.3.jar:?]
- My AVRO schema
test-10.avsc.txt
Note that the schema name is click
.
When Test is started, my schema registry server's log shows:
[2020-10-16 13:34:02,020] INFO 172.18.0.1 - - [16/Oct/2020:13:34:02 +0000] "GET /subjects/test-10-value/versions/latest HTTP/1.1" 200 481 4 (io.confluent.rest-utils.requests)
[2020-10-16 13:34:02,032] INFO 172.18.0.1 - - [16/Oct/2020:13:34:02 +0000] "GET /schemas/ids/2 HTTP/1.1" 200 436 4 (io.confluent.rest-utils.requests)
[2020-10-16 13:34:02,259] INFO 172.18.0.1 - - [16/Oct/2020:13:34:02 +0000] "POST /subjects/test-10-click/versions HTTP/1.1" 200 8 28 (io.confluent.rest-utils.requests)
Seems like your program is trying to register a new schema with schema registry, with subject name = test-10-click
. I guess the subject name is auto-generated with:
${kafka_topic_name} + '-' + ${AVRO_schema_name}
Instead of registering with this auto generated subject name:
-
Can it follow the original subject name, as loaded from schema registry? In my case, it will be
test-10-value
. -
Or can you provide an option to set the
Subject Name
to register the schema with schema registry?
The reason is I would like to reuse back the existing schema in schema registry, instead of creating new schema for JMeter test.
Thanks again for help & sorry for the trouble 🙏
from kloadgen.
Please ignore my request above. I realised that the schema subject name can be configured via value.subject.name.strategy
.
The default is set to io.confluent.kafka.serializers.subject.TopicRecordNameStrategy
. After configuring it as below, my issue is resolved.
value.subject.name.strategy : io.confluent.kafka.serializers.subject.TopicNameStrategy
My bad, sorry for the confusing request above, please ignore it 🙏
from kloadgen.
Hi @shuwnyuantee ,
No worries, glad you managed to solve the issue.
Just was close to answer about the different configuration properties and the two other samplers, we have.
But if you are happy now I'm happy too.
Mean that you approve the changes?
Cheers and happy weekend.
from kloadgen.
Millions thanks for providing this awesome plugin, appreciate your great work 🙏
I thought I will just raise few minor issues I came across during testing. Maybe it helps in your troubleshooting.
- For
string-map
field type, setting the map size inside[]
sometimes gives the wrong size in result.
SettingmapOfString[5]
-> but the result shows 4 key-value pairs.
result:
{"mapOfString": {"map": {"k3": {"string": "v3"}, "k1": {"string": "v1"}, "k2": {"string": "v2"}, "cBrbD": {"string": "NzRri"}}}, "arrayOfString": {"array": ["NIjSpRIFUq", "fgIWKJJhDWW"]}, "arrayOfMap": {"array": [{"H": {"string": "Q"}}]}}
- In java request, with
ConfluentKafkaSampler
, the last configauto.register.schemas
always appear duplicated. I have deleted the duplicated line manually, but it appears back after switching between views.
- In
Kafka Load Generator Config
, when trying to setField Length
for these field types:
string
boolean
int
long
string-map
string-array
string-map-array
it takes no effect. Afterwards, further UI interaction (clicking) inside Kafka Load Generator Config
throws similar error:
2020-10-17 13:02:21,625 ERROR o.a.j.r.Functor: Can't find method net.coru.kloadgen.model.FieldValueMapping#setValueLength(java.lang.String)
java.lang.Throwable: null
at org.apache.jorphan.reflect.Functor.doInvoke(Functor.java:255) [jorphan.jar:5.3]
at org.apache.jorphan.reflect.Functor.invoke(Functor.java:322) [jorphan.jar:5.3]
at org.apache.jorphan.gui.ObjectTableModel.setValueAt(ObjectTableModel.java:224) [jorphan.jar:5.3]
at javax.swing.JTable.setValueAt(JTable.java:2741) [?:1.8.0_131]
at javax.swing.JTable.editingStopped(JTable.java:4723) [?:1.8.0_131]
at javax.swing.AbstractCellEditor.fireEditingStopped(AbstractCellEditor.java:141) [?:1.8.0_131]
at javax.swing.DefaultCellEditor$EditorDelegate.stopCellEditing(DefaultCellEditor.java:368) [?:1.8.0_131]
at javax.swing.DefaultCellEditor.stopCellEditing(DefaultCellEditor.java:233) [?:1.8.0_131]
at com.github.weisj.darklaf.ui.table.DarkTableCellEditor.stopCellEditing(DarkTableCellEditor.java:222) [darklaf-core-2.1.1.jar:2.1.1]
at javax.swing.DefaultCellEditor$EditorDelegate.actionPerformed(DefaultCellEditor.java:385) [?:1.8.0_131]
at javax.swing.JTextField.fireActionPerformed(JTextField.java:508) [?:1.8.0_131]
at javax.swing.JTextField.postActionEvent(JTextField.java:721) [?:1.8.0_131]
at javax.swing.JTextField$NotifyAction.actionPerformed(JTextField.java:836) [?:1.8.0_131]
at javax.swing.SwingUtilities.notifyAction(SwingUtilities.java:1663) [?:1.8.0_131]
at javax.swing.JComponent.processKeyBinding(JComponent.java:2882) [?:1.8.0_131]
at javax.swing.JComponent.processKeyBindings(JComponent.java:2929) [?:1.8.0_131]
at javax.swing.JComponent.processKeyEvent(JComponent.java:2845) [?:1.8.0_131]
at java.awt.Component.processEvent(Component.java:6310) [?:1.8.0_131]
at java.awt.Container.processEvent(Container.java:2236) [?:1.8.0_131]
at java.awt.Component.dispatchEventImpl(Component.java:4889) [?:1.8.0_131]
at java.awt.Container.dispatchEventImpl(Container.java:2294) [?:1.8.0_131]
at java.awt.Component.dispatchEvent(Component.java:4711) [?:1.8.0_131]
at java.awt.KeyboardFocusManager.redispatchEvent(KeyboardFocusManager.java:1954) [?:1.8.0_131]
at java.awt.DefaultKeyboardFocusManager.dispatchKeyEvent(DefaultKeyboardFocusManager.java:806) [?:1.8.0_131]
at java.awt.DefaultKeyboardFocusManager.preDispatchKeyEvent(DefaultKeyboardFocusManager.java:1074) [?:1.8.0_131]
at java.awt.DefaultKeyboardFocusManager.typeAheadAssertions(DefaultKeyboardFocusManager.java:945) [?:1.8.0_131]
at java.awt.DefaultKeyboardFocusManager.dispatchEvent(DefaultKeyboardFocusManager.java:771) [?:1.8.0_131]
at java.awt.Component.dispatchEventImpl(Component.java:4760) [?:1.8.0_131]
at java.awt.Container.dispatchEventImpl(Container.java:2294) [?:1.8.0_131]
at java.awt.Window.dispatchEventImpl(Window.java:2746) [?:1.8.0_131]
at java.awt.Component.dispatchEvent(Component.java:4711) [?:1.8.0_131]
at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:758) [?:1.8.0_131]
at java.awt.EventQueue.access$500(EventQueue.java:97) [?:1.8.0_131]
at java.awt.EventQueue$3.run(EventQueue.java:709) [?:1.8.0_131]
at java.awt.EventQueue$3.run(EventQueue.java:703) [?:1.8.0_131]
at java.security.AccessController.doPrivileged(Native Method) ~[?:1.8.0_131]
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:80) [?:1.8.0_131]
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:90) [?:1.8.0_131]
at java.awt.EventQueue$4.run(EventQueue.java:731) [?:1.8.0_131]
at java.awt.EventQueue$4.run(EventQueue.java:729) [?:1.8.0_131]
at java.security.AccessController.doPrivileged(Native Method) ~[?:1.8.0_131]
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:80) [?:1.8.0_131]
at java.awt.EventQueue.dispatchEvent(EventQueue.java:728) [?:1.8.0_131]
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:201) [?:1.8.0_131]
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116) [?:1.8.0_131]
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:105) [?:1.8.0_131]
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101) [?:1.8.0_131]
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93) [?:1.8.0_131]
at java.awt.EventDispatchThread.run(EventDispatchThread.java:82) [?:1.8.0_131]
2020-10-17 13:02:21,632 ERROR o.a.j.JMeter: Uncaught exception in thread Thread[AWT-EventQueue-0,6,main]
org.apache.jorphan.util.JMeterError: Can't find method net.coru.kloadgen.model.FieldValueMapping#setValueLength(java.lang.String)
at org.apache.jorphan.reflect.Functor.doInvoke(Functor.java:256) ~[jorphan.jar:5.3]
at org.apache.jorphan.reflect.Functor.invoke(Functor.java:322) ~[jorphan.jar:5.3]
at org.apache.jorphan.gui.ObjectTableModel.setValueAt(ObjectTableModel.java:224) ~[jorphan.jar:5.3]
at javax.swing.JTable.setValueAt(JTable.java:2741) ~[?:1.8.0_131]
at javax.swing.JTable.editingStopped(JTable.java:4723) ~[?:1.8.0_131]
at javax.swing.AbstractCellEditor.fireEditingStopped(AbstractCellEditor.java:141) ~[?:1.8.0_131]
at javax.swing.DefaultCellEditor$EditorDelegate.stopCellEditing(DefaultCellEditor.java:368) ~[?:1.8.0_131]
at javax.swing.DefaultCellEditor.stopCellEditing(DefaultCellEditor.java:233) ~[?:1.8.0_131]
at com.github.weisj.darklaf.ui.table.DarkTableCellEditor.stopCellEditing(DarkTableCellEditor.java:222) ~[darklaf-core-2.1.1.jar:2.1.1]
at javax.swing.DefaultCellEditor$EditorDelegate.actionPerformed(DefaultCellEditor.java:385) ~[?:1.8.0_131]
at javax.swing.JTextField.fireActionPerformed(JTextField.java:508) ~[?:1.8.0_131]
at javax.swing.JTextField.postActionEvent(JTextField.java:721) ~[?:1.8.0_131]
at javax.swing.JTextField$NotifyAction.actionPerformed(JTextField.java:836) ~[?:1.8.0_131]
at javax.swing.SwingUtilities.notifyAction(SwingUtilities.java:1663) ~[?:1.8.0_131]
at javax.swing.JComponent.processKeyBinding(JComponent.java:2882) ~[?:1.8.0_131]
at javax.swing.JComponent.processKeyBindings(JComponent.java:2929) ~[?:1.8.0_131]
at javax.swing.JComponent.processKeyEvent(JComponent.java:2845) ~[?:1.8.0_131]
at java.awt.Component.processEvent(Component.java:6310) ~[?:1.8.0_131]
at java.awt.Container.processEvent(Container.java:2236) ~[?:1.8.0_131]
at java.awt.Component.dispatchEventImpl(Component.java:4889) ~[?:1.8.0_131]
at java.awt.Container.dispatchEventImpl(Container.java:2294) ~[?:1.8.0_131]
at java.awt.Component.dispatchEvent(Component.java:4711) ~[?:1.8.0_131]
at java.awt.KeyboardFocusManager.redispatchEvent(KeyboardFocusManager.java:1954) ~[?:1.8.0_131]
at java.awt.DefaultKeyboardFocusManager.dispatchKeyEvent(DefaultKeyboardFocusManager.java:806) ~[?:1.8.0_131]
at java.awt.DefaultKeyboardFocusManager.preDispatchKeyEvent(DefaultKeyboardFocusManager.java:1074) ~[?:1.8.0_131]
at java.awt.DefaultKeyboardFocusManager.typeAheadAssertions(DefaultKeyboardFocusManager.java:945) ~[?:1.8.0_131]
at java.awt.DefaultKeyboardFocusManager.dispatchEvent(DefaultKeyboardFocusManager.java:771) ~[?:1.8.0_131]
at java.awt.Component.dispatchEventImpl(Component.java:4760) ~[?:1.8.0_131]
at java.awt.Container.dispatchEventImpl(Container.java:2294) ~[?:1.8.0_131]
at java.awt.Window.dispatchEventImpl(Window.java:2746) ~[?:1.8.0_131]
at java.awt.Component.dispatchEvent(Component.java:4711) ~[?:1.8.0_131]
at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:758) ~[?:1.8.0_131]
at java.awt.EventQueue.access$500(EventQueue.java:97) ~[?:1.8.0_131]
at java.awt.EventQueue$3.run(EventQueue.java:709) ~[?:1.8.0_131]
at java.awt.EventQueue$3.run(EventQueue.java:703) ~[?:1.8.0_131]
at java.security.AccessController.doPrivileged(Native Method) ~[?:1.8.0_131]
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:80) ~[?:1.8.0_131]
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:90) ~[?:1.8.0_131]
at java.awt.EventQueue$4.run(EventQueue.java:731) ~[?:1.8.0_131]
at java.awt.EventQueue$4.run(EventQueue.java:729) ~[?:1.8.0_131]
at java.security.AccessController.doPrivileged(Native Method) ~[?:1.8.0_131]
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:80) ~[?:1.8.0_131]
at java.awt.EventQueue.dispatchEvent(EventQueue.java:728) ~[?:1.8.0_131]
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:201) [?:1.8.0_131]
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116) [?:1.8.0_131]
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:105) [?:1.8.0_131]
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101) [?:1.8.0_131]
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93) [?:1.8.0_131]
at java.awt.EventDispatchThread.run(EventDispatchThread.java:82) [?:1.8.0_131]
2020-10-17 13:02:25,421 ERROR o.a.j.r.Functor: Can't find method net.coru.kloadgen.model.FieldValueMapping#setValueLength(java.lang.String)
java.lang.Throwable: null
at org.apache.jorphan.reflect.Functor.doInvoke(Functor.java:255) [jorphan.jar:5.3]
at org.apache.jorphan.reflect.Functor.invoke(Functor.java:322) [jorphan.jar:5.3]
at org.apache.jorphan.gui.ObjectTableModel.setValueAt(ObjectTableModel.java:224) [jorphan.jar:5.3]
at javax.swing.JTable.setValueAt(JTable.java:2741) [?:1.8.0_131]
at javax.swing.JTable.editingStopped(JTable.java:4723) [?:1.8.0_131]
at javax.swing.AbstractCellEditor.fireEditingStopped(AbstractCellEditor.java:141) [?:1.8.0_131]
at javax.swing.DefaultCellEditor$EditorDelegate.stopCellEditing(DefaultCellEditor.java:368) [?:1.8.0_131]
at javax.swing.DefaultCellEditor.stopCellEditing(DefaultCellEditor.java:233) [?:1.8.0_131]
at com.github.weisj.darklaf.ui.table.DarkTableCellEditor.stopCellEditing(DarkTableCellEditor.java:222) [darklaf-core-2.1.1.jar:2.1.1]
at org.apache.jmeter.testbeans.gui.TableEditor.focusLost(TableEditor.java:289) [ApacheJMeter_core.jar:5.3]
at java.awt.AWTEventMulticaster.focusLost(AWTEventMulticaster.java:230) [?:1.8.0_131]
at java.awt.AWTEventMulticaster.focusLost(AWTEventMulticaster.java:229) [?:1.8.0_131]
at java.awt.AWTEventMulticaster.focusLost(AWTEventMulticaster.java:229) [?:1.8.0_131]
at java.awt.AWTEventMulticaster.focusLost(AWTEventMulticaster.java:229) [?:1.8.0_131]
at java.awt.AWTEventMulticaster.focusLost(AWTEventMulticaster.java:229) [?:1.8.0_131]
at java.awt.AWTEventMulticaster.focusLost(AWTEventMulticaster.java:229) [?:1.8.0_131]
at java.awt.AWTEventMulticaster.focusLost(AWTEventMulticaster.java:229) [?:1.8.0_131]
at java.awt.AWTEventMulticaster.focusLost(AWTEventMulticaster.java:229) [?:1.8.0_131]
at java.awt.AWTEventMulticaster.focusLost(AWTEventMulticaster.java:229) [?:1.8.0_131]
at java.awt.AWTEventMulticaster.focusLost(AWTEventMulticaster.java:229) [?:1.8.0_131]
at java.awt.AWTEventMulticaster.focusLost(AWTEventMulticaster.java:229) [?:1.8.0_131]
at java.awt.AWTEventMulticaster.focusLost(AWTEventMulticaster.java:229) [?:1.8.0_131]
at java.awt.AWTEventMulticaster.focusLost(AWTEventMulticaster.java:229) [?:1.8.0_131]
at java.awt.AWTEventMulticaster.focusLost(AWTEventMulticaster.java:229) [?:1.8.0_131]
at java.awt.AWTEventMulticaster.focusLost(AWTEventMulticaster.java:229) [?:1.8.0_131]
at java.awt.AWTEventMulticaster.focusLost(AWTEventMulticaster.java:229) [?:1.8.0_131]
at java.awt.AWTEventMulticaster.focusLost(AWTEventMulticaster.java:229) [?:1.8.0_131]
at java.awt.AWTEventMulticaster.focusLost(AWTEventMulticaster.java:229) [?:1.8.0_131]
at java.awt.AWTEventMulticaster.focusLost(AWTEventMulticaster.java:229) [?:1.8.0_131]
at java.awt.AWTEventMulticaster.focusLost(AWTEventMulticaster.java:229) [?:1.8.0_131]
at java.awt.AWTEventMulticaster.focusLost(AWTEventMulticaster.java:229) [?:1.8.0_131]
at java.awt.AWTEventMulticaster.focusLost(AWTEventMulticaster.java:229) [?:1.8.0_131]
at java.awt.AWTEventMulticaster.focusLost(AWTEventMulticaster.java:229) [?:1.8.0_131]
at java.awt.AWTEventMulticaster.focusLost(AWTEventMulticaster.java:229) [?:1.8.0_131]
at java.awt.AWTEventMulticaster.focusLost(AWTEventMulticaster.java:229) [?:1.8.0_131]
at java.awt.AWTEventMulticaster.focusLost(AWTEventMulticaster.java:229) [?:1.8.0_131]
at java.awt.AWTEventMulticaster.focusLost(AWTEventMulticaster.java:229) [?:1.8.0_131]
at java.awt.AWTEventMulticaster.focusLost(AWTEventMulticaster.java:229) [?:1.8.0_131]
at java.awt.AWTEventMulticaster.focusLost(AWTEventMulticaster.java:229) [?:1.8.0_131]
at java.awt.AWTEventMulticaster.focusLost(AWTEventMulticaster.java:229) [?:1.8.0_131]
at java.awt.AWTEventMulticaster.focusLost(AWTEventMulticaster.java:229) [?:1.8.0_131]
at java.awt.AWTEventMulticaster.focusLost(AWTEventMulticaster.java:229) [?:1.8.0_131]
at java.awt.AWTEventMulticaster.focusLost(AWTEventMulticaster.java:229) [?:1.8.0_131]
at java.awt.AWTEventMulticaster.focusLost(AWTEventMulticaster.java:229) [?:1.8.0_131]
at java.awt.AWTEventMulticaster.focusLost(AWTEventMulticaster.java:229) [?:1.8.0_131]
at java.awt.AWTEventMulticaster.focusLost(AWTEventMulticaster.java:229) [?:1.8.0_131]
at java.awt.AWTEventMulticaster.focusLost(AWTEventMulticaster.java:229) [?:1.8.0_131]
at java.awt.AWTEventMulticaster.focusLost(AWTEventMulticaster.java:229) [?:1.8.0_131]
at java.awt.AWTEventMulticaster.focusLost(AWTEventMulticaster.java:229) [?:1.8.0_131]
at java.awt.AWTEventMulticaster.focusLost(AWTEventMulticaster.java:229) [?:1.8.0_131]
at java.awt.AWTEventMulticaster.focusLost(AWTEventMulticaster.java:229) [?:1.8.0_131]
at java.awt.Component.processFocusEvent(Component.java:6425) [?:1.8.0_131]
at java.awt.Component.processEvent(Component.java:6289) [?:1.8.0_131]
at java.awt.Container.processEvent(Container.java:2236) [?:1.8.0_131]
at java.awt.Component.dispatchEventImpl(Component.java:4889) [?:1.8.0_131]
at java.awt.Container.dispatchEventImpl(Container.java:2294) [?:1.8.0_131]
at java.awt.Component.dispatchEvent(Component.java:4711) [?:1.8.0_131]
at java.awt.KeyboardFocusManager.redispatchEvent(KeyboardFocusManager.java:1954) [?:1.8.0_131]
at java.awt.DefaultKeyboardFocusManager.typeAheadAssertions(DefaultKeyboardFocusManager.java:995) [?:1.8.0_131]
at java.awt.DefaultKeyboardFocusManager.dispatchEvent(DefaultKeyboardFocusManager.java:661) [?:1.8.0_131]
at java.awt.Component.dispatchEventImpl(Component.java:4760) [?:1.8.0_131]
at java.awt.Container.dispatchEventImpl(Container.java:2294) [?:1.8.0_131]
at java.awt.Component.dispatchEvent(Component.java:4711) [?:1.8.0_131]
at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:758) [?:1.8.0_131]
at java.awt.EventQueue.access$500(EventQueue.java:97) [?:1.8.0_131]
at java.awt.EventQueue$3.run(EventQueue.java:709) [?:1.8.0_131]
at java.awt.EventQueue$3.run(EventQueue.java:703) [?:1.8.0_131]
at java.security.AccessController.doPrivileged(Native Method) ~[?:1.8.0_131]
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:80) [?:1.8.0_131]
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:90) [?:1.8.0_131]
at java.awt.EventQueue$4.run(EventQueue.java:731) [?:1.8.0_131]
at java.awt.EventQueue$4.run(EventQueue.java:729) [?:1.8.0_131]
at java.security.AccessController.doPrivileged(Native Method) ~[?:1.8.0_131]
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:80) [?:1.8.0_131]
at java.awt.EventQueue.dispatchEvent(EventQueue.java:728) [?:1.8.0_131]
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:201) [?:1.8.0_131]
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116) [?:1.8.0_131]
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:105) [?:1.8.0_131]
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101) [?:1.8.0_131]
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93) [?:1.8.0_131]
at java.awt.EventDispatchThread.run(EventDispatchThread.java:82) [?:1.8.0_131]
2020-10-17 13:02:25,422 ERROR o.a.j.JMeter: Uncaught exception in thread Thread[AWT-EventQueue-0,6,main]
org.apache.jorphan.util.JMeterError: Can't find method net.coru.kloadgen.model.FieldValueMapping#setValueLength(java.lang.String)
at org.apache.jorphan.reflect.Functor.doInvoke(Functor.java:256) ~[jorphan.jar:5.3]
at org.apache.jorphan.reflect.Functor.invoke(Functor.java:322) ~[jorphan.jar:5.3]
at org.apache.jorphan.gui.ObjectTableModel.setValueAt(ObjectTableModel.java:224) ~[jorphan.jar:5.3]
at javax.swing.JTable.setValueAt(JTable.java:2741) ~[?:1.8.0_131]
at javax.swing.JTable.editingStopped(JTable.java:4723) ~[?:1.8.0_131]
at javax.swing.AbstractCellEditor.fireEditingStopped(AbstractCellEditor.java:141) ~[?:1.8.0_131]
at javax.swing.DefaultCellEditor$EditorDelegate.stopCellEditing(DefaultCellEditor.java:368) ~[?:1.8.0_131]
at javax.swing.DefaultCellEditor.stopCellEditing(DefaultCellEditor.java:233) ~[?:1.8.0_131]
at com.github.weisj.darklaf.ui.table.DarkTableCellEditor.stopCellEditing(DarkTableCellEditor.java:222) ~[darklaf-core-2.1.1.jar:2.1.1]
at org.apache.jmeter.testbeans.gui.TableEditor.focusLost(TableEditor.java:289) ~[ApacheJMeter_core.jar:5.3]
at java.awt.AWTEventMulticaster.focusLost(AWTEventMulticaster.java:230) ~[?:1.8.0_131]
at java.awt.AWTEventMulticaster.focusLost(AWTEventMulticaster.java:229) ~[?:1.8.0_131]
at java.awt.AWTEventMulticaster.focusLost(AWTEventMulticaster.java:229) ~[?:1.8.0_131]
at java.awt.AWTEventMulticaster.focusLost(AWTEventMulticaster.java:229) ~[?:1.8.0_131]
at java.awt.AWTEventMulticaster.focusLost(AWTEventMulticaster.java:229) ~[?:1.8.0_131]
at java.awt.AWTEventMulticaster.focusLost(AWTEventMulticaster.java:229) ~[?:1.8.0_131]
at java.awt.AWTEventMulticaster.focusLost(AWTEventMulticaster.java:229) ~[?:1.8.0_131]
at java.awt.AWTEventMulticaster.focusLost(AWTEventMulticaster.java:229) ~[?:1.8.0_131]
at java.awt.AWTEventMulticaster.focusLost(AWTEventMulticaster.java:229) ~[?:1.8.0_131]
at java.awt.AWTEventMulticaster.focusLost(AWTEventMulticaster.java:229) ~[?:1.8.0_131]
at java.awt.AWTEventMulticaster.focusLost(AWTEventMulticaster.java:229) ~[?:1.8.0_131]
at java.awt.AWTEventMulticaster.focusLost(AWTEventMulticaster.java:229) ~[?:1.8.0_131]
at java.awt.AWTEventMulticaster.focusLost(AWTEventMulticaster.java:229) ~[?:1.8.0_131]
at java.awt.AWTEventMulticaster.focusLost(AWTEventMulticaster.java:229) ~[?:1.8.0_131]
at java.awt.AWTEventMulticaster.focusLost(AWTEventMulticaster.java:229) ~[?:1.8.0_131]
at java.awt.AWTEventMulticaster.focusLost(AWTEventMulticaster.java:229) ~[?:1.8.0_131]
at java.awt.AWTEventMulticaster.focusLost(AWTEventMulticaster.java:229) ~[?:1.8.0_131]
at java.awt.AWTEventMulticaster.focusLost(AWTEventMulticaster.java:229) ~[?:1.8.0_131]
at java.awt.AWTEventMulticaster.focusLost(AWTEventMulticaster.java:229) ~[?:1.8.0_131]
at java.awt.AWTEventMulticaster.focusLost(AWTEventMulticaster.java:229) ~[?:1.8.0_131]
at java.awt.AWTEventMulticaster.focusLost(AWTEventMulticaster.java:229) ~[?:1.8.0_131]
at java.awt.AWTEventMulticaster.focusLost(AWTEventMulticaster.java:229) ~[?:1.8.0_131]
at java.awt.AWTEventMulticaster.focusLost(AWTEventMulticaster.java:229) ~[?:1.8.0_131]
at java.awt.AWTEventMulticaster.focusLost(AWTEventMulticaster.java:229) ~[?:1.8.0_131]
at java.awt.AWTEventMulticaster.focusLost(AWTEventMulticaster.java:229) ~[?:1.8.0_131]
at java.awt.AWTEventMulticaster.focusLost(AWTEventMulticaster.java:229) ~[?:1.8.0_131]
at java.awt.AWTEventMulticaster.focusLost(AWTEventMulticaster.java:229) ~[?:1.8.0_131]
at java.awt.AWTEventMulticaster.focusLost(AWTEventMulticaster.java:229) ~[?:1.8.0_131]
at java.awt.AWTEventMulticaster.focusLost(AWTEventMulticaster.java:229) ~[?:1.8.0_131]
at java.awt.AWTEventMulticaster.focusLost(AWTEventMulticaster.java:229) ~[?:1.8.0_131]
at java.awt.AWTEventMulticaster.focusLost(AWTEventMulticaster.java:229) ~[?:1.8.0_131]
at java.awt.AWTEventMulticaster.focusLost(AWTEventMulticaster.java:229) ~[?:1.8.0_131]
at java.awt.AWTEventMulticaster.focusLost(AWTEventMulticaster.java:229) ~[?:1.8.0_131]
at java.awt.AWTEventMulticaster.focusLost(AWTEventMulticaster.java:229) ~[?:1.8.0_131]
at java.awt.AWTEventMulticaster.focusLost(AWTEventMulticaster.java:229) ~[?:1.8.0_131]
at java.awt.AWTEventMulticaster.focusLost(AWTEventMulticaster.java:229) ~[?:1.8.0_131]
at java.awt.AWTEventMulticaster.focusLost(AWTEventMulticaster.java:229) ~[?:1.8.0_131]
at java.awt.AWTEventMulticaster.focusLost(AWTEventMulticaster.java:229) ~[?:1.8.0_131]
at java.awt.AWTEventMulticaster.focusLost(AWTEventMulticaster.java:229) ~[?:1.8.0_131]
at java.awt.AWTEventMulticaster.focusLost(AWTEventMulticaster.java:229) ~[?:1.8.0_131]
at java.awt.AWTEventMulticaster.focusLost(AWTEventMulticaster.java:229) ~[?:1.8.0_131]
at java.awt.Component.processFocusEvent(Component.java:6425) ~[?:1.8.0_131]
at java.awt.Component.processEvent(Component.java:6289) ~[?:1.8.0_131]
at java.awt.Container.processEvent(Container.java:2236) ~[?:1.8.0_131]
at java.awt.Component.dispatchEventImpl(Component.java:4889) ~[?:1.8.0_131]
at java.awt.Container.dispatchEventImpl(Container.java:2294) ~[?:1.8.0_131]
at java.awt.Component.dispatchEvent(Component.java:4711) ~[?:1.8.0_131]
at java.awt.KeyboardFocusManager.redispatchEvent(KeyboardFocusManager.java:1954) ~[?:1.8.0_131]
at java.awt.DefaultKeyboardFocusManager.typeAheadAssertions(DefaultKeyboardFocusManager.java:995) ~[?:1.8.0_131]
at java.awt.DefaultKeyboardFocusManager.dispatchEvent(DefaultKeyboardFocusManager.java:661) ~[?:1.8.0_131]
at java.awt.Component.dispatchEventImpl(Component.java:4760) ~[?:1.8.0_131]
at java.awt.Container.dispatchEventImpl(Container.java:2294) ~[?:1.8.0_131]
at java.awt.Component.dispatchEvent(Component.java:4711) ~[?:1.8.0_131]
at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:758) ~[?:1.8.0_131]
at java.awt.EventQueue.access$500(EventQueue.java:97) ~[?:1.8.0_131]
at java.awt.EventQueue$3.run(EventQueue.java:709) ~[?:1.8.0_131]
at java.awt.EventQueue$3.run(EventQueue.java:703) ~[?:1.8.0_131]
at java.security.AccessController.doPrivileged(Native Method) ~[?:1.8.0_131]
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:80) ~[?:1.8.0_131]
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:90) ~[?:1.8.0_131]
at java.awt.EventQueue$4.run(EventQueue.java:731) ~[?:1.8.0_131]
at java.awt.EventQueue$4.run(EventQueue.java:729) ~[?:1.8.0_131]
at java.security.AccessController.doPrivileged(Native Method) ~[?:1.8.0_131]
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:80) ~[?:1.8.0_131]
at java.awt.EventQueue.dispatchEvent(EventQueue.java:728) ~[?:1.8.0_131]
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:201) [?:1.8.0_131]
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116) [?:1.8.0_131]
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:105) [?:1.8.0_131]
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101) [?:1.8.0_131]
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93) [?:1.8.0_131]
at java.awt.EventDispatchThread.run(EventDispatchThread.java:82) [?:1.8.0_131]
Thanks again for the sharing this awesome plugin 🎉 👍
from kloadgen.
HI @shuwnyuantee,
Really thank you for your feedback!! I appreciate it a lot.
I'll to fixit asasp.
Cheers!!
from kloadgen.
Hi @shuwnyuantee,
I was able to reproduce and fix all the issues but the list one. I'm not able to reproduce it. I tried with several avros, big/small and different types, string, int, log, string-map, string-map-array.. and I could get that error you said.
Can you please tell me what jvm are you using?
Cheers!
from kloadgen.
@kszosze Thanks for looking into this.
Sorry, which issue you said you can't reproduce? Is it the last one with Field Length
error?
I'm running JMeter 5.3 on Mac, with your plugin version 2.1.3. Here's my Java version:
guest2@shuwnyuan-MacBook-Pro:~$ java -version
java version "1.8.0_131"
Java(TM) SE Runtime Environment (build 1.8.0_131-b11)
Java HotSpot(TM) 64-Bit Server VM (build 25.131-b11, mixed mode)
from kloadgen.
hi @shuwnyuantee,
I think I deal with all the issues.
Last one the field lenght error was cause by the version of JMeter, we had the 5.2.2 in the code and you were using the 5.3. Looks something change between versions.
But last changes in the branch should solve it.
Can you please try it?
cheers
from kloadgen.
@kszosze , sorry for my late reply.
I find the below issues are solved.
-
In java request, with ConfluentKafkaSampler, the last config of
auto.register.schemas
no longer appears duplicated. -
When trying to set
Field Length
, it no longer throws error.
Thanks & appreciate your great help 🙏 🎉
from kloadgen.
Related Issues (20)
- [Issue]: Avro schemas with references HOT 6
- [Documentation Issue]: Postman collection to import HOT 1
- [Issue]: `sasl.jaas.config` property is not applied HOT 5
- [Issue]: Error when all fields are optional in AVRO
- [Issue]: Error with JMeter 5.6.2 in connection with plugin kloadgen 5.6.5 HOT 18
- [Issue]: Complete the funcionality of "Value Schema File Serializer" HOT 1
- [Issue]: Can't load an Avro schema serializer from register.
- [Issue]: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target HOT 4
- [Issue]: NullPointerException when starting a test with a Key Schema File Serializer Config HOT 1
- [Issue]: JSON value shema serializer exception HOT 1
- [Issue]: Simple Key Config serializer exception HOT 1
- [Issue]: Error while processing sampler: 'Kafka Broker'. java.lang.NullPointerException: Cannot invoke "String.toUpperCase()" because "registry" is null HOT 10
- [Issue]: Consumer does not show consumed messages in JMeter
- [Kloadgen]: I want to integrate Kloadgen with Google-PubSub
- [Issue]: kloadgen based on jmeter 5.6.3
- [Issue]: Unable to produce messages with bytes field in Protobuf schema using kloadgen plugin HOT 5
- [Issue]: sasl.jaas.config property is not applied HOT 4
- Starting a simple project with Simple Value Config and Simple Key Config HOT 5
- Error filtering class org.apache.commons.compress.harmony.pack200.Segment, it will be ignored java.lang.IncompatibleClassChangeError: class org.apache.commons.compress.harmony.pack200.Segment can not implement org.objectweb.asm.ClassVisitor, because it is not an interface (org.objectweb.asm.ClassVisitor is in unnamed module of loader org.apache.jmeter.DynamicClassLoader @65ab7765)[Issue]: HOT 6
- [Issue]: Parameter values are not taking properly HOT 1
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from kloadgen.