Advertisement
Guest User

Untitled

a guest
Jun 28th, 2017
62
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.03 KB | None | 0 0
  1. @Test
  2. public void testOrphanBlobStore() throws Exception {
  3. int instances = 2;
  4. long cleanupInterval = 1000l;
  5. BlobClient blobClient = null;
  6. BlobStoreService blobStoreService = null;
  7. BlobServer[] blobServers = new BlobServer[instances];
  8. BlobLibraryCacheManager[] managers = new BlobLibraryCacheManager[instances];
  9. InetSocketAddress[] addresses = new InetSocketAddress[instances];
  10. Random random = new Random();
  11.  
  12. try {
  13. final Configuration config = new Configuration();
  14. config.setString(HighAvailabilityOptions.HA_MODE, "ZOOKEEPER");
  15. config.setString(CoreOptions.STATE_BACKEND, "FILESYSTEM");
  16. config.setString(HighAvailabilityOptions.HA_STORAGE_PATH,
  17. temporaryFolder.getRoot().getPath() + "/tmp-data");
  18.  
  19. blobStoreService = BlobUtils.createBlobStoreFromConfig(config);
  20.  
  21. for (int i = 0; i < instances; i++) {
  22. blobServers[i] = new BlobServer(config, blobStoreService);
  23. addresses[i] = new InetSocketAddress("0.0.0.0", blobServers[i].getPort());
  24. managers[i] = new BlobLibraryCacheManager(blobServers[i], cleanupInterval);
  25. }
  26.  
  27. blobClient = new BlobClient(addresses[0], config);
  28.  
  29. byte[] blob_1 = new byte[1024];
  30. byte[] blob_2 = new byte[1024];
  31.  
  32. random.nextBytes(blob_1);
  33. random.nextBytes(blob_2);
  34.  
  35. BlobKey key_1 = blobClient.put(blob_1);
  36. BlobKey key_2 = blobClient.put(blob_2);
  37.  
  38. List<BlobKey> orphans = new ArrayList<>();
  39. orphans.add(key_1);
  40. orphans.add(key_2);
  41.  
  42. JobID jobOrphan = new JobID();
  43. managers[0].registerJob(jobOrphan, orphans, Collections.<URL>emptyList());
  44.  
  45. assertTrue(managers[0].getFile(key_1).exists());
  46. assertTrue(managers[0].getFile(key_2).exists());
  47.  
  48. assertTrue(managers[1].getFile(key_1).exists());
  49. assertTrue(managers[1].getFile(key_2).exists());
  50.  
  51. // server restarted and manager recovered to another server
  52. blobServers[0] = new BlobServer(config, blobStoreService);
  53. managers[0] = new BlobLibraryCacheManager(blobServers[1], cleanupInterval);
  54.  
  55. byte[] blob_3 = new byte[1024];
  56.  
  57. random.nextBytes(blob_3);
  58.  
  59. BlobKey key_3 = blobClient.put(blob_3);
  60.  
  61. List<BlobKey> blobs = new ArrayList<>();
  62. blobs.add(key_3);
  63.  
  64. JobID job = new JobID();
  65. managers[0].registerJob(job, blobs, Collections.<URL>emptyList());
  66.  
  67. assertTrue(managers[0].getFile(key_1).exists());
  68. assertTrue(managers[0].getNumberOfReferencesByKey(key_1) == 0);
  69.  
  70. assertTrue(managers[0].getFile(key_2).exists());
  71. assertTrue(managers[0].getNumberOfReferencesByKey(key_2) == 0);
  72.  
  73. assertTrue(managers[0].getFile(key_3).exists());
  74. assertTrue(managers[0].getNumberOfReferencesByKey(key_3) == 1);
  75.  
  76. managers[0].unregisterJob(jobOrphan);
  77. managers[0].unregisterJob(job);
  78.  
  79. // Cleaning up
  80. Thread.sleep(cleanupInterval + 1);
  81.  
  82. // Checking orphan references
  83. //----------------------------------------------------------------------
  84. assertTrue(managers[0].getNumberOfReferencesByKey(key_1) == 0);
  85. assertTrue(managers[0].getFile(key_1).exists());
  86.  
  87. assertTrue(managers[0].getNumberOfReferencesByKey(key_2) == 0);
  88. assertTrue(managers[0].getFile(key_2).exists());
  89. //----------------------------------------------------------------------
  90.  
  91. int fileNotFound = 0;
  92. try {
  93. assertTrue(managers[0].getNumberOfReferencesByKey(key_3) == 0);
  94. managers[0].getFile(key_3).exists();
  95. } catch (IOException ex) {
  96. fileNotFound++;
  97. }
  98.  
  99. // File not found, was removed correctly by cleanup
  100. assertEquals(1, fileNotFound);
  101.  
  102. // Checking files after cleanup. This files should be re-register
  103. assertTrue(managers[0].getFile(key_1).exists());
  104. assertTrue(managers[0].getFile(key_2).exists());
  105.  
  106. } finally {
  107. if (blobClient != null && !blobClient.isClosed()) {
  108. blobClient.close();
  109. }
  110.  
  111. for (BlobServer bs : blobServers) {
  112. if (bs != null && !bs.isShutdown()) {
  113. bs.close();
  114. }
  115. }
  116.  
  117. for (BlobLibraryCacheManager blcm : managers) {
  118. if (blcm != null) {
  119. blcm.shutdown();
  120. }
  121. }
  122.  
  123. if (blobStoreService != null) {
  124. blobStoreService.closeAndCleanupAllData();
  125. }
  126. }
  127. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement