sbsdev / mdr2

Production Management Tool for DAISY Talking Books
GNU Affero General Public License v3.0
0 stars 0 forks source link

Directory not empty when deleting #67

Closed egli closed 1 year ago

egli commented 6 years ago

When archiving a production we try to delete the associated directories. Often times this deletion fails with the following stack trace. The directories are mounted in fairly convoluted ways. The problem might also be a race condition between the process trying to delete recursively and the different involved parties mounting the actual files.

13:10:37,034 WARN  [mdr2.util] (Thread-48375 (HornetQ-client-global-threads-400884138)) Directory not empty /var/lib/mdr2/recorded/24627. Trying harder
13:10:37,688 WARN  [mdr2.util] (Thread-48375 (HornetQ-client-global-threads-400884138)) Now trying again to delete /var/lib/mdr2/recorded/24627
13:10:37,691 ERROR [mdr2.util] (Thread-48375 (HornetQ-client-global-threads-400884138)) #error {
 :cause /var/lib/mdr2/recorded/24627
 :via
 [{:type java.nio.file.DirectoryNotEmptyException
   :message /var/lib/mdr2/recorded/24627
   :at [sun.nio.fs.UnixFileSystemProvider implDelete UnixFileSystemProvider.java 242]}]
 :trace
 [[sun.nio.fs.UnixFileSystemProvider implDelete UnixFileSystemProvider.java 242]
  [sun.nio.fs.AbstractFileSystemProvider delete AbstractFileSystemProvider.java 103]
  [java.nio.file.Files delete Files.java 1079]
  [org.tobereplaced.nio.file$delete_BANG_ invokeStatic file.clj 283]
  [org.tobereplaced.nio.file$delete_BANG_ invoke file.clj 283]
  [mdr2.util$try_hard_to_delete invokeStatic util.clj 27]
  [mdr2.util$try_hard_to_delete invoke util.clj 17]
  [mdr2.util$post_visit_directory invokeStatic util.clj 36]
  [mdr2.util$post_visit_directory invoke util.clj 31]
  [org.tobereplaced.nio.file$naive_visitor$continue__912$fn__913 invoke file.clj 472]
  [org.tobereplaced.nio.file$naive_visitor$raise_or_continue__921$fn__922 invoke file.clj 480]
  [org.tobereplaced.nio.file$file_visitor$reify__906 postVisitDirectory file.clj 454]
  [java.nio.file.FileTreeWalker walk FileTreeWalker.java 224]
  [java.nio.file.FileTreeWalker walk FileTreeWalker.java 69]
  [java.nio.file.Files walkFileTree Files.java 2602]
  [org.tobereplaced.nio.file$walk_file_tree invokeStatic file.clj 494]
  [org.tobereplaced.nio.file$walk_file_tree doInvoke file.clj 488]
  [clojure.lang.RestFn invoke RestFn.java 425]
  [mdr2.util$delete_directory_BANG_ invokeStatic util.clj 43]
  [mdr2.util$delete_directory_BANG_ invoke util.clj 38]
  [mdr2.production$delete_all_dirs_BANG_ invokeStatic production.clj 296]
  [mdr2.production$delete_all_dirs_BANG_ invoke production.clj 293]
  [mdr2.production$set_state_archived_BANG_$fn__6992 invoke production.clj 300]
  [clojure.lang.AFn call AFn.java 18]
  [org.projectodd.wunderboss.transactions.NarayanaTransaction required NarayanaTransaction.java 33]
  [mdr2.production$set_state_archived_BANG_ invokeStatic production.clj 299]
  [mdr2.production$set_state_archived_BANG_ invoke production.clj 298]
  [mdr2.archive$fn__9010$fn__9011 invoke archive.clj 217]
  [clojure.lang.AFn call AFn.java 18]
  [org.projectodd.wunderboss.transactions.NarayanaTransaction begin NarayanaTransaction.java 121]
  [org.projectodd.wunderboss.transactions.NarayanaTransaction required NarayanaTransaction.java 33]
  [mdr2.archive$fn__9010 invokeStatic archive.clj 195]
  [mdr2.archive$fn__9010 invoke archive.clj 193]
  [clojure.lang.MultiFn invoke MultiFn.java 229]
  [mdr2.main$_main$fn__18032 invoke main.clj 27]
  [immutant.messaging.internal$message_handler$fn__2452 invoke internal.clj 113]
  [clojure.lang.AFn applyToHelper AFn.java 154]
  [clojure.lang.AFn applyTo AFn.java 144]
  [clojure.core$apply invokeStatic core.clj 646]
  [clojure.core$with_bindings_STAR_ invokeStatic core.clj 1881]
  [clojure.core$with_bindings_STAR_ doInvoke core.clj 1881]
  [clojure.lang.RestFn applyTo RestFn.java 142]
  [clojure.core$apply invokeStatic core.clj 650]
  [clojure.core$bound_fn_STAR_$fn__4671 doInvoke core.clj 1911]
  [clojure.lang.RestFn invoke RestFn.java 408]
  [immutant.messaging.internal$message_handler$reify__2454 onMessage internal.clj 120]
  [org.projectodd.wunderboss.messaging.jms.JMSDestination$1 onMessage JMSDestination.java 70]
  [org.projectodd.wunderboss.messaging.jms.JMSListener onMessage JMSListener.java 89]
  [org.hornetq.jms.client.JMSMessageListenerWrapper onMessage JMSMessageListenerWrapper.java 103]
  [org.hornetq.core.client.impl.ClientConsumerImpl callOnMessage ClientConsumerImpl.java 1116]
  [org.hornetq.core.client.impl.ClientConsumerImpl access$500 ClientConsumerImpl.java 56]
  [org.hornetq.core.client.impl.ClientConsumerImpl$Runner run ClientConsumerImpl.java 1251]
  [org.hornetq.utils.OrderedExecutorFactory$OrderedExecutor$1 run OrderedExecutorFactory.java 104]
  [java.util.concurrent.ThreadPoolExecutor runWorker ThreadPoolExecutor.java 1145]
  [java.util.concurrent.ThreadPoolExecutor$Worker run ThreadPoolExecutor.java 615]
  [java.lang.Thread run Thread.java 745]]}
egli commented 1 year ago

With the 0.9.0 series this has not been a problem