#sling #jackrabbit #jackrabbit-oak
#sling #jackrabbit #jackrabbit-дуб
Вопрос:
Я хочу перенести двоичный контент из segmentstore в новое хранилище данных во время обновления репозитория. Текущая версия моего репозитория 1.6.1. Он использует TarMK segmentstore и не имеет хранилища данных. По моему опыту, наличие двоичных файлов в файловом хранилище данных значительно повышает производительность. Итак, это то, что я хочу сделать с моим обновлением до 1.26.0. Но как скопировать двоичные файлы в новое хранилище данных?
Эта команда переносит мой контент в новое хранилище. Приложение загружает содержимое должным образом. Но хранилища данных нет.
$ java -jar ~/oak-upgrade-1.26.0.jar --copy-binaries
--copy-orphaned-versions=false --copy-versions=false
--include-paths=/apps/lsa,/content/lsa,/var/recyclebin/content/lsa
../dev-jun-author/sling/repository sling/repository
Когда я пытаюсь скопировать двоичные файлы в новое хранилище данных с помощью этой команды…
$ java -jar ~/oak-upgrade-1.26.0.jar --copy-binaries
--include-paths=/apps/lsa,/content/lsa,/var/recyclebin/content/lsa
--datastore=sling/repository/datastore ../dev-jun-author/sling/repository sling/repository
Он имеет следующий вывод..
24.08.2020 16:43:12.263 [главная] ИНФОРМАЦИЯ org.apache.jackrabbit.oak.upgrade.cli.parser.Для параметра MigrationOptions — copyVersions установлено значение 1969-12-31 24.08.2020 16:43:12.265 [главная] ИНФОРМАЦИЯ org.apache.jackrabbit.oak.upgrade.cli.parser.MigrationOptions — параметру copyOrphanedVersions присвоено значение 1969-12-31 24.08.2020 16:43:12.265 [главная] ИНФОРМАЦИЯ org.apache.jackrabbit.oak.upgrade.cli.parser.Варианты миграции — пути для включения: [/apps/lsa, /content /lsa, /var/recyclebin/content /lsa] 24.08.2020 16:43:12.265 [главная] ИНФОРМАЦИЯ org.apache.jackrabbit.oak.upgrade.cli.parser.Варианты миграции — Размер кэша: 256 МБ 24.08.2020 16:43:12.269 [главная] ИНФОРМАЦИЯ org.apache.jackrabbit.oak.upgrade.cli.parser.Документы хранилища — Источник: SEGMENT_TAR[../dev-jun-author/sling/repository] 24.08.2020 16:43:12.271 [главная] ИНФОРМАЦИЯ org.apache.jackrabbit.oak.upgrade.cli.parser.StoreArguments — Назначение: SEGMENT_TAR[sling/ репозиторий] 24.08.2020 16:43:12.296 [главная] INFO org.apache.jackrabbit.oak.segment.file.FileStore — Создание хранилища файлов FileStoreBuilder{version=1.26.0, directory = ../dev-jun-author/sling/repository/segmentstore, blobStore=null, MaxFileSize=256, segmentCacheSize=256, stringCacheSize=256, templateCacheSize=64, stringDeduplicationCacheSize=15000, templateduplicationcachesize=3000, nodeduplicationcachesize = 1048576, отображение памяти = false, offHeapAccess= false, gcOptions=SegmentGCOptions{приостановлено = false, оценка отключена =false, gcSizeDeltaEstimation=1073741824, количество повторных попыток = 5, Принудительный тайм-аут = 60, сохраненные поколения = 2, gcType = FULL}} 24.08.2020 16:43:12.428 [главная] ИНФОРМАЦИЯ org.apache.jackrabbit.oak.segment.file.Доступно только для чтения — TarMK открыто только для чтения: ../dev-jun-author/sling/repository/segmentstore (mmap=false) 24.08.2020 16:43:12.601 [main] INFO org.apache.jackrabbit.oak.segment.file.Хранилище файлов для чтения — TarMK закрыто: ../dev-jun-author/sling/repository/segmentstore 24.08.2020 16:43:12.618 [главная] ИНФОРМАЦИЯ org.apache.jackrabbit.oak.upgrade.cli.parser.Аргументы хранилища данных — большие двоичные объекты, встроенные в SEGMENT_TAR[../dev-jun-author/sling/repository], будут скопированы в FileDataStore[sling / repository /datastore] 24.08.2020 16:43:12.619 [main] INFO org.apache.jackrabbit.oak.upgrade.cli.parser.Аргументы хранилища данных — Исходное хранилище больших двоичных объектов: DummyBlobStore 24.08.2020 16:43:12.619 [главная] ИНФОРМАЦИЯ org.apache.jackrabbit.oak.segment.file.FileStore — Создание хранилища файлов FileStoreBuilder{version=1.26.0, directory = ../dev-jun-author/sling/repository/segmentstore, blobStore=null, MaxFileSize=256, segmentCacheSize=256, stringCacheSize=256, templateCacheSize=64, stringDeduplicationCacheSize=15000, templateduplicationcachesize=3000, nodeduplicationcachesize = 1048576, отображение памяти = true, offHeapAccess= false, gcOptions=SegmentGCOptions{приостановлено = false, оценка отключена =false, gcSizeDeltaEstimation=1073741824, количество повторных попыток = 5, Принудительный тайм-аут = 60, сохраненные поколения = 2, gcType = FULL}} 24.08.2020 16:43:12.632 [главная] ИНФОРМАЦИЯ org.apache.jackrabbit.oak.segment.file.Доступно только для чтения — TarMK открыто только для чтения: ../dev-jun-author/sling/repository/segmentstore (mmap = true) 24.08.2020 16:43:12.635 [главная] ИНФОРМАЦИЯ org.apache.jackrabbit.oak.segment.SegmentNodeStore$SegmentNodeStoreBuilder
- Creating segment node store SegmentNodeStoreBuilder{blobStore=inline}
24.08.2020 16:43:12.644 [main] INFO org.apache.jackrabbit.oak.segment.scheduler.LockBasedScheduler —
Initializing SegmentNodeStore with the commitFairLock option enabled.
24.08.2020 16:43:12.654 [main] INFO org.apache.jackrabbit.oak.upgrade.cli.parser.DatastoreArguments —
Destination blob store: FileDataStore[sling/repository/datastore]
24.08.2020 16:43:12.665 [main] INFO org.apache.jackrabbit.oak.segment.file.FileStore — Creating file store
FileStoreBuilder{version=1.26.0,
directory=sling/repository/segmentstore, blobStore=DataStore backed
BlobStore
[org.apache.jackrabbit.oak.plugins.blob.datastore.OakFileDataStore],
maxFileSize=256, segmentCacheSize=256, stringCacheSize=256,
templateCacheSize=64, stringDeduplicationCacheSize=15000,
templateDeduplicationCacheSize=3000,
nodeDeduplicationCacheSize=1048576, memoryMapping=true,
offHeapAccess=false, gcOptions=SegmentGCOptions{paused=false,
estimationDisabled=false, gcSizeDeltaEstimation=1073741824,
retryCount=5, forceTimeout=60, retainedGenerations=2, gcType=FULL}}
Sling’s error log has this output
ОШИБКА 25.08.2020 10:32:35.030 [0:0:0:0:0:0:0:1 [1598365955029] ПОЛУЧИТЬ /content/lsa/assets/Screen Shot 2020-04-15 at 4.06.14 PM.png HTTP/1.1] служба org.apache.sling.engine.impl.SlingRequestProcessorImpl: не поддающийся перехвату java.lang.Исключение IllegalStateException: попытка прочитать внешний большой двоичный объект с помощью blobId [d4c06d8a7e0b3381caa5c918d6403319d603dd153e5ce32f663e940af55f0326#815933] без указания BlobStore в org.apache.jackrabbit.oak.segment.SegmentBlob.getBlob(SegmentBlob.java:248) [org.apache.jackrabbit.oak-segment-tar:1.26.0] в org.apache.jackrabbit.oak.segment.SegmentBlob.getNewStream(SegmentBlob.java:253) [org.apache.jackrabbit.oak-segment-tar:1.26.0] в org.apache.jackrabbit.oak.segment.SegmentBlob.getNewStream(SegmentBlob.java: 84) [org.apache.jackrabbit.oak-segment-tar:1.26.0] в org.apache.jackrabbit.oak.plugins.value.jcr.BinaryImpl.GetStream(BinaryImpl.java:59) [org.apache.jackrabbit.oak-store-spi:1.26.0] в org.apache.sling.jcr.resource.internal.helper .LazyInputStream.GetStream(LazyInputStream.java: 106) [org.apache.sling.jcr.resource:3.0.20] в org.apache.sling.jcr.resource.internal.helper.LazyInputStream.read(LazyInputStream.java:65) [org.apache.sling.jcr.resource: 3.0.20] в org.apache.commons.io.IOUtils.copyLarge (IOUtils.java: 2314) [org.apache.commons.io:2.6.0] в org.apache.commons.io.IOUtils.copy(IOUtils.java: 2270) [org.apache.commons.io: 2.6.0] в org.apache.commons.io.IOUtils.copyLarge(IOUtils.java: 2291) [ org.apache.commons.io: 2.6.0] в org.apache.commons.io.IOUtils.copy(IOUtils.java:2246) [org.apache.commons.io:2.6.0] в com.peregrine.rendition.RenditionsServlet$StreamResponse.writeTo(RenditionsServlet.java:191) [com.peregrine-cms.base.core:1.0.0.SNAPSHOT] в com.peregrine.commons.servlets.Запрос AbstractBaseServlet.doRequest(AbstractBaseServlet.java:133) в com.peregrine.commons.servlets.AbstractBaseServlet.doGet(AbstractBaseServlet.java:82) в org.apache.sling.api.servlets.SlingSafeMethodsServlet.mayService(SlingSafeMethodsServlet.java:266) [org.apache.sling.api: 2.22.0] в org.apache.sling.api.servlets.SLINGALLMETHOD servlet.mayService(slingallmethod servlet.java:137) [org.apache.sling.api: 2.22.0] в org.apache.sling.api.servlets.SlingSafeMethodsServlet.service(SlingSafeMethodsServlet.java:342) [org.apache.sling.api: 2.22.0] в org.apache.sling.api.servlets.SlingSafeMethodsServlet.service(SlingSafeMethodsServlet.java:374) [org.apache.sling.api: 2.22.0] по запросу org.apache.sling.engine.impl..requestData.service(requestData.java:552) [org.apache.sling.engine:2.7.2] в org.apache.sling.engine.impl.filter.SlingComponentFilterChain.render(SlingComponentFilterChain.java:44) [org.apache.sling.engine:2.7.2] в org.apache.sling.engine.impl.filter.AbstractSlingFilterChain.doFilter(AbstractSlingFilterChain.java:82) [org.apache.sling.engine: 2.7.2] в org.apache.sling.engine.impl.SlingRequestProcessorImpl.processComponent(SlingRequestProcessorImpl.java:283 ) [org.apache.sling.engine: 2.7.2] в org.apache.sling.engine.impl.filter.Запрос на создание цепочки фильтров.render(RequestSlingFilterChain.java:49) [org.apache.sling.engine:2.7.2] в org.apache.sling.engine.impl.filter.AbstractSlingFilterChain.Дофильтруйте (AbstractSlingFilterChain.java:82) [org.apache.sling.engine:2.7.2] в org.apache.sling.engine.impl.debug.Запросите progresstrackerlogfilter.доФильтр (requestprogressstrackerlogfilter.java:110) [org.apache.sling.engine:2.7.2] в org.apache.sling.engine.impl.filter.AbstractSlingFilterChain.Сделайте фильтр (AbstractSlingFilterChain.java:72) [org.apache.sling.engine:2.7.2] в org.apache.sling.i18n.impl.I18NFilter.Выполните доФильтр (I18NFilter.java:131) [org.apache.sling.i18n:2.5.14] в org.apache.sling.engine.impl.filter.AbstractSlingFilterChain.Сделайте фильтр (AbstractSlingFilterChain.java:72) [org.apache.sling.engine:2.7.2] в org.apache.sling.engine.impl.filter.AbstractSlingFilterChain.doFilter(AbstractSlingFilterChain.java:78) [org.apache.sling.engine: 2.7.2] в org.apache.sling.engine.impl.SlingRequestProcessorImpl.doProcessRequest(SlingRequestProcessorImpl.java:151 ) [org.apache.sling.engine: 2.7.2] в org.apache.sling.engine.impl.SlingMainServlet.service(SlingMainServlet.java:250) [org.apache.sling.engine:2.7.2] в org.apache.felix.http.base.internal.handler.ServletHandler.handle(ServletHandler.java:123) [org.apache.felix.http.jetty: 4.0.18] в org.apache.felix.http.base.internal.dispatch.Цепочка вызовов.Выполнить доФильтр (цепочка вызовов.java: 86) [org.apache.felix.http.jetty:4.0.18] в org.apache.sling.junit.impl.servlet.TestLogServlet$TestNameLoggingFilter.доФильтр (TestLogServlet.java:257) [org.apache.sling.junit.core:1.0.26] в org.apache.felix.http.base.internal.handler.FilterHandler.handle(FilterHandler.java:142) [org.apache.felix.http.jetty:4.0.18] at org.apache.felix.http.base.internal.dispatch.Цепочка вызовов.доФильтр (цепочка вызовов.java:81) [org.apache.felix.http.jetty:4.0.18] в org.apache.sling.i18n.impl.I18NFilter.Выполнить доФильтр (I18NFilter.java:131) [org.apache.sling.i18n:2.5.14] в org.apache.felix.http.base.internal.handler.FilterHandler.handle(FilterHandler.java:142) [org.apache.felix.http.jetty:4.0.18] at org.apache.felix.http.base.internal.dispatch.Цепочка вызовов.доФильтр (цепочка вызовов.java:81) [org.apache.felix.http.jetty:4.0.18] в org.apache.sling.engine.impl.log.RequestLoggerФильтр.Выполнить доФильтр (RequestLoggerFilter.java:75) [org.apache.sling.engine:2.7.2] в org.apache.felix.http.base.internal.handler.FilterHandler.handle(FilterHandler.java:142) [org.apache.felix.http.jetty:4.0.18] at org.apache.felix.http.base.internal.dispatch.Цепочка вызовов.doFilter(цепочка вызовов.java:81) [org.apache.felix.http.jetty: 4.0.18] в org.apache.sling.engine.impl.parameters.RequestParameterSupportConfigurer.doFilter(RequestParameterSupportConfigurer.java:67 ) [org.apache.sling.engine: 2.7.2] в org.apache.felix.http.base.internal.handler.FilterHandler.handle(FilterHandler.java:142) [org.apache.felix.http.jetty:4.0.18] at org.apache.felix.http.base.internal.dispatch.Цепочка вызовов.доФильтр (цепочка вызовов.java: 81) [org.apache.felix.http.jetty: 4.0.18] в org.apache.felix.http.base.internal.dispatch.Диспетчер $1.Дофильтруйте (Dispatcher.java:146) [org.apache.felix.http.jetty: 4.0.18] в org.apache.felix.http.base.internal.whiteboard.WhiteboardManager $2.Дофильтруйте (WhiteboardManager.java:1002) [org.apache.felix.http.jetty: 4.0.18] в org.apache.felix.http.sslfilter.internal.SSLFilter.доФильтр (SSLFilter.java:97) [org.apache.felix.http.sslfilter:1.2.6] в org.apache.felix.http.base.internal.handler.PreprocessorHandler.handle(PreprocessorHandler.java:136) [org.apache.felix.http.jetty: 4.0.18] в org.apache.felix.http.base.internal.whiteboard.WhiteboardManager $ 2.Дофильтруйте (WhiteboardManager.java:1008) [org.apache.felix.http.jetty: 4.0.18] в org.apache.felix.http.base.internal.whiteboard.WhiteboardManager.invokePreprocessors(WhiteboardManager.java:1012) [org.apache.felix.http.jetty: 4.0.18] в org.apache.felix.http.base.internal.dispatch.Dispatcher.dispatch(Dispatcher.java:91) [org.apache.felix.http.jetty: 4.0.18] в org.apache.felix.http.base.internal.dispatch.DispatcherServlet.service(DispatcherServlet.java:49) [org.apache.felix.http.jetty:4.0.18] в javax.servlet.http.HttpServlet.service (HttpServlet.java:725) [org.apache.felix.http.servlet-api:1.1.2] в org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:763) [org.apache.felix.http.jetty:4.0.18] в org.eclipse.jetty.servlet.ServletHandler.Обработайте (ServletHandler.java:551) [org.apache.felix.http.jetty:4.0.18] в org.eclipse.jetty.server.handler.ScopedHandler.nextHandle(ScopedHandler.java:233) [org.apache.felix.http.jetty:4.0.18] в org.eclipse.jetty.server.session.Обработчик сеансов.Обработайте (SessionHandler.java: 1610) [org.apache.felix.http.jetty:4.0.18] в org.eclipse.jetty.server.handler.ScopedHandler.nextHandle(ScopedHandler.java:233) [org.apache.felix.http.jetty:4.0.18] в org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1363) [org.apache.felix.http.jetty: 4.0.18] в org.eclipse.jetty.server.handler.ScopedHandler.nextScope(ScopedHandler.java:188) [org.apache.felix.http.jetty:4.0.18] в org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:489) [org.apache.felix.http.jetty:4.0.18] в org.eclipse.jetty.server.session.Обработчик сеанса.doScope (обработчик сеанса.java: 1580) [org.apache.felix.http.jetty: 4.0.18] в org.eclipse.jetty.server.handler.ScopedHandler.nextScope(ScopedHandler.java:186) [org.apache.felix.http.jetty:4.0.18] в org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1278) [org.apache.felix.http.jetty:4.0.18] в org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:141) [org.apache.felix.http.jetty:4.0.18] в org.eclipse.jetty.server.handler.ContextHandlerCollection.обработайте (ContextHandlerCollection.java:221) [org.apache.felix.http.jetty:4.0.18] в org.eclipse.jetty.server.handler.HandlerWrapper.handle (HandlerWrapper.java:127) [org.apache.felix.http.jetty:4.0.18] на org.eclipse.jetty.server.Server.handle(Server.java:500) [org.apache.felix.http.jetty:4.0.18] в org.eclipse.jetty.server.HttpChannel.lambda$обрабатывает $1 (HttpChannel.java:383) [org.apache.felix.http.jetty: 4.0.18] в org.eclipse.jetty.server.HttpChannel.dispatch (HttpChannel.java:547) [org.apache.felix.http.jetty:4.0.18] на org.eclipse.jetty.server.HttpChannel.handle(HttpChannel.java:375) [org.apache.felix.http.jetty: 4.0.18] на org.eclipse.jetty.server.HttpConnection.onFillable (HttpConnection.java:273) [org.apache.felix.http.jetty: 4.0.18] в org.eclipse.jetty.io.AbstractConnection$ReadCallback.successed(AbstractConnection.java:311) [org.apache.felix.http.jetty: 4.0.18] в org.eclipse.jetty.io.FillInterest.fillable(FillInterest.java: 103) [org.apache.felix.http.jetty: 4.0.18] в org.eclipse.jetty.io.Конечная точка канала $ 2.выполнить (конечная точка канала.java:117) [org.apache.felix.http.jetty:4.0.18] в org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.RunTask(EatWhatYouKill.java:336) [org.apache.felix.http.jetty:4.0.18] в org.eclipse.jetty.util.thread.strategy.Съешьте что угодно.Создайте (EatWhatYouKill.java:313) [org.apache.felix.http.jetty:4.0.18] в org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.tryProduce (EatWhatYouKill.java:171) [org.apache.felix.http.jetty:4.0.18] в org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.run(EatWhatYouKill.java:129) [org.apache.felix.http.jetty:4.0.18] в org.eclipse.jetty.util.thread.Зарезервированный threadexecutor$ReservedThread.run (Зарезервированный threadexecutor.java:375) [org.apache.felix.http.jetty: 4.0.18] в org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:806) [org.apache.felix.http.jetty:4.0.18] в org.eclipse.jetty.util.thread.QueuedThreadPool$Runner.run( QueuedThreadPool.java:938) [org.apache.felix.http.jetty:4.0.18] в java.base/java.lang.Thread.run(Thread.java:834)
Я вижу, что в репозитории есть хранилище данных с несколькими папками. Но изображения в моем приложении Sling не работают. Как я могу перенести двоичные файлы в хранилище данных с помощью oak-upgrade или другой утилиты?
Ответ №1:
Я делал это однажды давным-давно. Ваша команда для разделения хранилища выглядит правильной. Вы можете проверить папку хранилища данных после запуска средства обновления oak, чтобы увидеть, созданы ли файлы.
Не забудьте создать необходимые файлы конфигурации для использования файлового хранилища данных перед запуском Sling в новом (разделенном) расположении репозитория.
Создайте org.apache.jackrabbit.oak.plugins.blob.datastore.FileDataStore.config
файл в install
папке, который содержит по крайней мере это свойство:
path="./repository/datastore"
Также создайте org.apache.jackrabbit.oak.plugins.segment.SegmentNodeStoreService.config
файл в install
папке, который содержит по крайней мере это свойство:
customBlobStore=B"true"
Минимальная длина записи, используемая по умолчанию средством обновления oak, составляет 16384 байта.
Смотрите https://jackrabbit.apache.org/oak/docs/osgi_config.html#config-sling для получения дополнительной информации.
Я бы также предложил не выполнять частичную миграцию содержимого при разделении двоичных файлов. Все в Sling — это контент, который включает также ваши пакеты OSGi и т.д.
Комментарии:
1. Спасибо! Я пометил как правильное. Для меня не хватало двух элементов: пользовательского флага blobstore, как вы упомянули, но важным аспектом было также то, как и когда был инициализирован целевой репозиторий (т. Е. репозиторий с. datastore). Я опубликовал пример для этой настройки здесь… github.com/apache/sling-org-apache-sling-starter/pull /…