Commit Graph

2158 Commits

Author SHA1 Message Date
Giuseppe Cafarelli 8f552993a6 Fix NPE on TransportActionListener for elasticsearch 2 2020-02-12 12:14:57 +01:00
Nikolay Martynov fd58187994 Support JFR profiling 2020-02-11 14:55:19 -05:00
Laplie Anderson 9023c6e1c7 Fix a couple tests using the wrong arguments 2020-02-11 11:44:46 -05:00
Laplie Anderson 01b0bebc93 minor formatting 2020-02-11 11:44:46 -05:00
Laplie Anderson 0cb0ae0a48 Less repetition in gradle files 2020-02-11 11:44:46 -05:00
Laplie Anderson c79fe3a459 Create shared internal jar 2020-02-11 11:44:46 -05:00
Laplie Anderson 3c0877e38a Create a shared parent classloader 2020-02-11 11:42:39 -05:00
Tyler Benson 032f22f5a6
Reduce tracer thread count by combining scheduled executors int… (#1200)
Reduce tracer thread count by combining scheduled executors into a single executor.
2020-02-11 08:18:59 -08:00
Tyler Benson 51bffa2e8a Move agent api classes to bootstrap package so they're not analyzed by muzzle
Also move jdbc classes to bootstrap to reduce size and complexity of those reference checkers.

These changes reduce the total file size of these instrumentation classes by 635k, which should also result in decent memory savings.
2020-02-10 15:09:15 -08:00
Tyler Benson 486d98135e Code review changes 2020-02-10 11:37:36 -08:00
Tyler Benson e5980d4812 Fix muzzle 2020-02-10 10:45:58 -08:00
Tyler Benson 75c7769192 Reduce tracer thread count by combining scheduled executors into a single executor.
Pulls out utility classes for reuse by other projects.

This also meant the dependency had to be bundled with dd-trace-ot since it isn't published as a separate dependency.
2020-02-10 10:45:58 -08:00
heathkd 7e62bca7fe limit hibernate latest dependency test to 5.x 2020-02-07 17:57:34 -05:00
Lev Priima 5265a43c6d Reduce use of Thread::setContextClassLoader 2020-02-06 22:53:04 -05:00
Tyler Benson 14b5576cd8
Merge pull request #1201 from DataDog/tyler/upgrade-okhttp
Upgrade OkHttp client to 3.12.8
2020-02-04 15:55:36 -08:00
Tyler Benson cab139e905 Upgrade OkHttp client to 3.12.8 2020-02-04 15:06:44 -08:00
Laplie Anderson a811c027ce
Merge pull request #1188 from DataDog/landerson/finatra
Finatra Instrumentation
2020-02-04 17:36:47 -05:00
Tyler Benson daae198b08 Set dispatcher span on request instead of clear
Clearing the span caused traces to be broken up and reported independently when calling forward/include.
2020-01-30 21:55:16 -05:00
Douglas Q Hawkins 53d32b4324
Merge pull request #1189 from DataDog/dougqh/type-caching2
Revised type cache
2020-01-30 18:47:02 -05:00
Laplie Anderson ed12af6994 Assume parent span is netty 2020-01-30 18:21:49 -05:00
dougqh faeb069424 Adjusting capacity check again 2020-01-30 18:08:49 -05:00
dougqh 235a6470fb googleJavaFormat 2020-01-30 17:45:40 -05:00
dougqh 0f095f0adb Final clean-up
- Removed unused method from earlier version
- Corrected previously overlooked comments that were remnant of prior version
2020-01-30 17:44:24 -05:00
Laplie Anderson 37a279069b Add server tests 2020-01-30 15:23:26 -05:00
Blinkingor 8d83172128 clazz -> segment rename 2020-01-29 18:41:29 +01:00
Blinkingor db485d10da final configString 2020-01-28 16:20:02 +01:00
Blinkingor 811051d111 Remove overlapping tests and fix failing unit test 2020-01-28 16:06:23 +01:00
Blinkingor 10b963d277 Codenarc fixes 2020-01-28 15:35:39 +01:00
Blinkingor cf876b5e67 Fix import order 2020-01-28 15:21:50 +01:00
Blinkingor 1e390984c1 Fix potential StackOverFlowError on regexp 2020-01-28 10:28:37 +01:00
dougqh 176f826a44 Adjusting approximateSize check to be more reliable 2020-01-27 17:44:39 -05:00
dougqh 4c7a0ba7a7 Fixing muzzle?
MuzzlePlugin groovy checks that no threads are spawned because this holds the ClassLoader live.

This was breaking with the caching change because the cache no longer uses the Cleaner service.

This caused a problem because the Thread behind the cleaner is created lazily when the first task is created, but without the cache the creation was delayed.

To solve this, I addressed the original cause of the leak.  The newly created Thread automatically inherits the contextClassLoader of its parent, but that's unnecessary for a cleaner thread.

So I changed the ThreadFactory for cleaner to explicitly null out the contextClassLoader.

We should probably null out contextClassLoader in other thread factories and also reduce our use of contextClassLoaders in general, but that will left to another PR.
2020-01-27 17:14:17 -05:00
dougqh d50f901f39 googleJavaFormat, codeNarcTest, and test reliability 2020-01-27 12:34:39 -05:00
dougqh fb871611b5 Replacing ID generation with WeakReference reuse
First pass at replacing ID generation with WeakReference reuse

In this first version, the Cache<ClassLoader, ID> was replaced with Cache<ClassLoader, WeakReference<ClassLoader>>.

The core cache is still of Cache<TypeCacheKey, TypePool.Resolution> and TypeCacheKey logically remains a composite key of ClassLoader, class name.

The removal of ID assignment means ID exhaustion is no longer na issue, so there's never a need to rebuild the cache.  For that reason, CacheInstance has removed and the core caching logic has been moved into DDCachingPoolStrategy.

While TypeCacheKey remains conceptually the same, the internals have changed somewhat.  The TypeCacheKey now has 3 core fields...
- loaderHash
- loadeRef
- class name

Since loader refs are recycled, the fast path for key equivalence can use reference equivalence of the reference objects.

This change ripples through the CacheProvider-s which also have to store loaderHash and loaderRef.

It may be worth going a step further and switching to a Cache<Loader, TypePool> as well.  That still avoid the creation of many WeakReference-s, since the underlying CacheProvider will hold a canonical WeakReference per ClassLoader.
2020-01-27 12:03:44 -05:00
dougqh cf877f67e5 Working around muzzle quirk
Muzzle doesn't like creation of SecureClassLoader-s, so switching to a URLClassLoader for my placeholder loader in tests
2020-01-27 09:47:36 -05:00
Brian Devins-Suresh 660041636a
Merge pull request #1190 from DataDog/devinsba/hibernate-null-entity-check
Add null check to hibernate decorator
2020-01-24 14:55:11 -05:00
Brian Devins-Suresh 3daad0009d Add null check to hibernate decorator 2020-01-24 10:58:52 -05:00
Laplie Anderson 8ff985afdb Cleaner way to skip netty executor's tasks 2020-01-23 12:04:56 -05:00
dougqh 984d77e44c googleJavaFormat & codeNarc 2020-01-23 11:15:39 -05:00
dougqh 726236bd64 Type cache overhaul
This change overhauls the core type cache

The new approach aims to achieve several things...
1 - cache is strictly bounded -- no variance for number of classes of ClassLoaders
2 - cache is significantly smaller
3 - cache doesn't compromise start-up time
4 - primary eviction policy isn't driven by time
5 - primary eviction policy isn't driven by GC

There are some slight compromises here.
In practice, start-up does increase slightly in a memory rich environment; however, start-up improves considerably in a memory poor environment.

The basic approcach is to have a single unified Guava cache for all ClassLoaders -- nominally keyed a composite of ClassLoader & class name

The ByteBuddy CacheProvider are simply thin wrappers around the Guava cache associated to a particular ClassLoader

However rather than having a large number of WeakReferences floating around.  The cache assigns an ID to each ClassLoader.

To further avoid, consuming memory the cache only preserves a small map of Loader / ID assignments.  This means a ClassLoader may have more than one active ID.

This introduce the possibility for ID exhaustion.  That unlikely case is handle by retiring the internal CacheInstance and starting anew.
2020-01-23 10:55:16 -05:00
Laplie Anderson 68e52497d6 Move to versioned folder name 2020-01-23 10:51:38 -05:00
dougqh 17af9b752c Fix typo in test name 2020-01-23 10:40:48 -05:00
Nikolay Martynov 950389587c Simplify groovy/scala/kotlin compile dependency hack 2020-01-23 09:40:15 -05:00
Laplie Anderson 4e58643bd0 Initial finatra instrumentation 2020-01-22 18:09:10 -05:00
Tyler Benson f9e43516ad Set timeouts on individual tests and increase overall test timeout. 2020-01-22 09:06:03 -08:00
Laplie Anderson 64ed09d76c
Merge pull request #1179 from DataDog/landerson/internal-jar-memory
Use streams directly in DatadogClassLoader
2020-01-16 10:51:42 -05:00
Laplie Anderson 6766e12597
Merge pull request #1173 from DataDog/landerson/weakmap-computeifabsent
Synchronized audit: WeakMap computeIfAbsent
2020-01-15 14:51:29 -05:00
Laplie Anderson 607c8f277e Don't copy to byte[], return input stream directly 2020-01-15 13:38:44 -05:00
Laplie Anderson 68ed1da9c6 Don't call `map.get()` in the `put(..)` case 2020-01-15 12:41:01 -05:00
Laplie Anderson a0b1cd4a75 WeakMap computeIfAbsent 2020-01-15 12:26:15 -05:00
Tyler Benson e31cbd6c89 Add Builder to DDTracer
Deprecate previous constructors.
2020-01-14 17:44:34 -08:00
Tyler Benson a52a1420db
Merge pull request #1165 from DataDog/tyler/servlet
Add servlet integrations for request and response dispatch back in.
2020-01-13 13:17:29 -08:00
Tyler Benson d42e72b683
Merge pull request #1171 from DataDog/tyler/bb-filter
Remove more declared method filtering for optimization
2020-01-13 13:05:28 -08:00
Tyler Benson ef6cd9c52c
Merge pull request #1170 from DataDog/tyler/couchbase
Adjust version compatibility to only 2.x
2020-01-13 13:04:57 -08:00
Tyler Benson 5fe26f004b Remove more declared method filtering for optimization
Same logic that was applied in #1169
2020-01-13 12:52:41 -08:00
Nikolay Martynov 6bf1e159b0
Merge pull request #1167 from DataDog/mar-kolya/upgrade-jmxfetch
Upgrade jmxfetch to latest version
2020-01-13 15:45:12 -05:00
Tyler Benson 77cdd210c6 Also update latestDepTest ranges. 2020-01-13 12:31:38 -08:00
Nikolay Martynov cb7faee63f Remove logging config from jmxfetch setup
It already uses slf4j
2020-01-13 15:23:04 -05:00
Tyler Benson 603155f56f
Merge pull request #1169 from DataDog/tyler/remove-filter
Optimize HasSuperMethodMatcher logic
2020-01-13 12:11:27 -08:00
Tyler Benson a0f0d45c74 Adjust version compatibility to only 2.x
They recently released 3.0.0 which is not compatible with our instrumentation.
2020-01-13 12:10:57 -08:00
Nikolay Martynov dcc5726797 Fix jmxfetch log level and log location config
Looks like this got lost in b505c60543
2020-01-13 15:05:45 -05:00
Nikolay Martynov d55d13e239 Exclude some dependencies from jmxfetch 2020-01-13 14:45:19 -05:00
Nikolay Martynov 8b5d89501b Upgrade jmxfetch to latest version 2020-01-13 14:19:03 -05:00
Tyler Benson 25397fd128 Fix formatting and add test. 2020-01-13 11:18:45 -08:00
Bruce Yu 13b84416b9 Blacklisting headers with -bin suffixes in GrpcExtractAdapter 2020-01-13 11:18:45 -08:00
Tyler Benson 49425e9963 Move request-response linking to main servlet advice
servlet-service is off by default, so we can't rely on it being called there.
2020-01-13 10:48:35 -08:00
Tyler Benson e440eba9a1 Enable Servlet request and response dispatcher instrumentation by default.
Change config for Servlet Filter and Service and JDBC DataSource instrumentation so it must be explicitly enabled (won't be enabled by accident if all of servlet is enabled).
2020-01-10 13:51:21 -08:00
Tyler Benson 43fbf28035 Revert "Remove experimental jdbc and servlet integrations until further evaluation"
This reverts commit 2432a92230.
2020-01-10 12:53:24 -08:00
Tyler Benson 7cb24f35c0 Better error handling for getClientInfo in JDBCDecorator
An exception there caused a span to be created but then never finished.
2020-01-08 15:10:54 -08:00
Tyler Benson 5e8af8439a Optimize HasSuperMethodMatcher logic
Instead of filtering then iterating, just iterate through everything and apply filter inline.

This will help avoid allocation for filter iterator and improve if early match is found.
2020-01-07 17:10:01 -08:00
Tyler Benson 03dd908fdb
Merge pull request #1158 from DataDog/tyler/aws-1-tagging
Add various tags for AWS SDK v1.x
2020-01-03 08:38:56 -08:00
Tyler Benson 4947dc3bd3 Add various tags for AWS SDK v1.x
This brings it inline with the v2 instrumentation.
2020-01-02 13:23:30 -08:00
Tyler Benson dacafe4217
Merge pull request #1157 from DataDog/pawel/rmi-add-client-and-server-info-to-decorators
[rmi] add instrumentation names to client and server decorators, remove default client service name
2020-01-02 11:41:40 -08:00
Laplie Anderson 6b6554996a
Merge pull request #1155 from DataDog/landerson/muzzle-scan-classloader-matcher
Add classloader matcher to muzzle scan
2019-12-30 10:12:59 -05:00
Pawel Chojnacki bbaf7278a6 [rmi] remove rmi client service name 2019-12-24 11:59:29 +01:00
Pawel Chojnacki a4b0dcbc9f [rmi] add instrumentation names to client and server decorators 2019-12-23 19:05:34 +01:00
Pawel Chojnacki 65c701dd51
Merge pull request #1128 from DataDog/pawel/add_rmi_support
Add RMI support
2019-12-23 14:38:46 +01:00
Pawel Chojnacki f71ba14016 [rmi] use simple thread local for propagating context
+ add more documentation
2019-12-23 13:25:14 +01:00
Tyler Benson 9020b74128
Merge pull request #1147 from DataDog/tyler/kafka-async
Add async propagation flags for kafka consumer.
2019-12-20 14:55:36 -08:00
Laplie Anderson f181fa721f Add classloader matcher to muzzle scan 2019-12-20 16:17:08 -05:00
Laplie Anderson 97b947919f Add a comment 2019-12-20 15:27:32 -05:00
Laplie Anderson 7338bbdd06 Register on JAX-RS client instead of builder 2019-12-20 13:15:04 -05:00
Pawel Chojnacki 3f21f6419d [rmi] Split context propagation to server and client instrumentation
+ Separate extra code from advices
 + cleanup helper definitions
2019-12-20 16:16:53 +01:00
Pawel Chojnacki c3308042d3 [rmi] use ObjectEndpoint#toString() to avoid need for reflection to be able to compare object identifiers. 2019-12-20 12:10:35 +01:00
Tyler Benson 32db01200c
Merge pull request #1131 from fujigon/feature/debugging
apply comma split logic to servlet request extract adapter
2019-12-19 09:06:12 -08:00
Pawel Chojnacki bb05700806 [rmi] Improve connection overhead and add additional metadata
- Cache response per connection to ensure as little communication overhead as possible is needed
 - change context payload serialization to use plain hashmap
   + add more logging
 - only set parent context on root entry point
   + use decorator to create spans
 - Use Instrumentation context to avoid reflection
 - separate integration parts into packages
2019-12-19 17:21:16 +01:00
Pawel Chojnacki 832605a01a [rmi] Add distributed context propagation
The flow for context propagation is as follows.

 * <p>We inject into StreamRemoteCall constructor used for invoking remote tasks and performs a
 * backwards compatible check to ensure if the other side is prepared to receive context propagation
 * messages then if successful sends a context propagation message
 *
 * <p>Context propagation consist of a Serialized HashMap with all data set by usual context
 * injection, which includes things like sampling priority, trace and parent id
 *
 * <p>As well as optional baggage items
 *
 * <p>On the other side of the communication a special Dispatcher is created when a message with
 * DD_CONTEXT_CALL_ID is received.
 *
 * <p>If the server is not instrumented first call will gracefully fail just like any other unknown
 * call. With small caveat that this first call needs to *not* have any parameters, since those will
 * not be read from connection and instead will be interpreted as another remote instruction, but
 * that instruction will essentially be garbage data and will cause the parsing loop to throw exception
 * and shutdown the connection which we do not want
2019-12-19 17:21:07 +01:00
Pawel Chojnacki 0ee80a0b95 [rmi] Instrumentation for RMI 1.2 and later
includes instrumentation of client and server endpoints
currently missing passing of execution context from client to server
2019-12-19 17:20:50 +01:00
Tyler Benson fb8f7af342
Merge pull request #1149 from DataDog/tyler/jdk-muzzle
Add option for muzzle validation on the specific JDK version
2019-12-19 08:14:54 -08:00
kfujita b707a3aab9 move multi-value aware logic to Extractor. 2019-12-19 13:33:08 +09:00
kfujita 0f3125498c add test case 2019-12-19 13:33:03 +09:00
kfujita a5e693bb92 assert fix same as JettyServlet3Test 2019-12-19 13:32:09 +09:00
Laplie Anderson dc0cbeb95d apply comma split logic to servlet request extract adapter 2019-12-19 13:32:09 +09:00
Tyler Benson 31b77cbd7b Capture error message even if no exception object provided.
This is currently only used by the GoogleHttpClient instrumentation, but may be used by customers too.
2019-12-18 13:49:24 -08:00
Tyler Benson ded28674d3 Add option for muzzle validation on the specific JDK version
This is still useful to validate various aspects of the integrations even if it doesn't need to check against maven.
2019-12-18 13:40:19 -08:00
Tyler Benson 7095ea3426 Add async propagation flags for kafka consumer. 2019-12-18 10:40:54 -08:00
Tyler Benson 96edbe8b8a Add better exception handling in Agent initialization
An invalid statsd hostname causes an exception for jmxfetch.  This should be an error, but not prevent the app from starting.

Also improved log variable name consistency.
2019-12-17 14:15:42 -08:00
Tyler Benson 99992df998 Fix tagging query string for additional servers
Add test to common test suite and adapt each test.
2019-12-17 09:33:27 -08:00
Tyler Benson a2b86e6b96 Pin kafka latestDepTest version to 2.3.x
2.4.0 introduces test failures:
```
Caused by: java.lang.NoClassDefFoundError: org.I0Itec.zkclient.ZkClient
```
when executing `compileLatestDepTestGroovy`.
2019-12-16 08:51:30 -08:00
Tyler Benson 839de614a5
Merge pull request #1136 from DataDog/tyler/tag-query
Capture full servlet URL in decorator
2019-12-12 15:16:38 -08:00