Hello,

We've been seeing these intermittent netconf failures on jenkins:

 Caused by: java.lang.IllegalArgumentException: Unable to create cache
directory at cache/schema
     at
com.google.common.base.Preconditions.checkArgument(Preconditions.java:210)
     at
org.opendaylight.yangtools.yang.model.repo.util.FilesystemSchemaSourceCache.<init>(FilesystemSchemaSourceCache.java:74)
     at
org.opendaylight.netconf.topology.AbstractNetconfTopology.<clinit>(AbstractNetconfTopology.java:149)

In FilesystemSchemaSourceCache, it does this:

  if (!storageDirectory.exists()) {
      checkArgument(storageDirectory.mkdirs(), "Unable to create cache
directory at %s",
              storageDirectory);
  }

mkdirs returns false if the dir/file already exists. I think there's a race
condition where some other code on another thread interleaves and creates
the dir in between the exists and mkdirs calls. As a workaround, I
submitted https://git.opendaylight.org/gerrit/#/c/72775/ that adds retries
if FilesystemSchemaSourceCache throws an IAE and also no longer fails class
initialization on failure. So even if there's another strange reason mkdirs
returns false (eg permissions although highly unlikely), at least it won't
fail SFT.

Assuming my theory is correct,  changing FilesystemSchemaSourceCache to:

  checkArgument(storageDirectory.mkdirs() || storageDirectory.exists(),
        "Unable to create cache directory at %s", storageDirectory);

would alleviate the issue. I'll push that change to yangtools as well
although it won't be available until the next release.

Tom
_______________________________________________
controller-dev mailing list
controller-dev@lists.opendaylight.org
https://lists.opendaylight.org/mailman/listinfo/controller-dev

Reply via email to