I removed that line from the code and it seems to have solved the problem. Thank you very much! :) All the best, Laszlo
On Tue, Aug 17, 2021 at 9:54 AM László Ciople <ciople.las...@gmail.com> wrote: > Ok, thank you for the tips. I will modify it and get back to you :) > > On Tue, Aug 17, 2021 at 9:42 AM David Morávek <d...@apache.org> wrote: > >> Hi Laszlo, >> >> Please use reply-all for mailing list replies. This may help others >> finding their answer in the future ;) >> >> >>> sb.append(DeviceDetail.class.getName()).append('@').append(Integer.toHexString(System.identityHashCode(this))).append('['); >> >> >> This part will again make your key non-deterministic, because you're >> using a memory address inside the content for hashing. I don't see any >> other problem in the snippet you've sent. >> >> Best, >> D. >> >> On Tue, Aug 17, 2021 at 8:33 AM László Ciople <ciople.las...@gmail.com> >> wrote: >> >>> I modified the code to use a sha256 hash instead of the hashCode when >>> the id is not present in the object. The same behaviour was manifested >>> still. Here is the code that selects the key: >>> @Override >>> public String getKey(AzureADIamEvent value) throws Exception { >>> // key is the device id or the hash of the device properties >>> String key = value.payload.properties.deviceDetail.deviceId; >>> >>> if (key == null || key.equals("")) { >>> LOG.warn("Device id is null or empty, using sha256 value"); >>> key = DigestUtils.sha256Hex(value.payload.properties. >>> deviceDetail.toString()); >>> } >>> >>> return key; >>> } >>> >>> And the definition of the class the key is created from: >>> public class DeviceDetail { >>> @JsonProperty("browser") >>> public String browser; >>> @JsonProperty("deviceId") >>> public String deviceId; >>> @JsonProperty("displayName") >>> public String displayName; >>> @JsonProperty("operatingSystem") >>> public String operatingSystem; >>> @JsonProperty("trustType") >>> public String trustType; >>> @Override >>> public String toString() { >>> StringBuilder sb = new StringBuilder(); >>> sb.append(DeviceDetail.class.getName()).append('@').append( >>> Integer.toHexString(System.identityHashCode(this))).append('['); >>> sb.append("browser"); >>> sb.append('='); >>> sb.append(((this.browser == null)?"<null>":this.browser)); >>> sb.append(','); >>> sb.append("deviceId"); >>> sb.append('='); >>> sb.append(((this.deviceId == null)?"<null>":this.deviceId)); >>> sb.append(','); >>> sb.append("displayName"); >>> sb.append('='); >>> sb.append(((this.displayName == null)?"<null>":this.displayName >>> )); >>> sb.append(','); >>> sb.append("operatingSystem"); >>> sb.append('='); >>> sb.append(((this.operatingSystem == null)?"<null>":this. >>> operatingSystem)); >>> sb.append(','); >>> sb.append("trustType"); >>> sb.append('='); >>> sb.append(((this.trustType == null)?"<null>":this.trustType)); >>> sb.append(','); >>> if (sb.charAt((sb.length()- 1)) == ',') { >>> sb.setCharAt((sb.length()- 1), ']'); >>> } else { >>> sb.append(']'); >>> } >>> return sb.toString(); >>> } >>> } >>> >>>