[
https://issues.apache.org/jira/browse/WAVE-393?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13696655#comment-13696655
]
John Darret Steward commented on WAVE-393:
------------------------------------------
Please excuse my question, but did you try with typing in two different
computers with two different users at the same time?
In case it helps, this is my server.config:
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.W
# Core Configuration for the Wave in a Box server
#
# Run "ant -f server-config.xml" to generate the server.config file
automatically.
# To override default values pass them to the ant script. For example
# to override wave_server_domain run: ant -f server-config.xml
-Dwave_server_domain=example.com
# Domain name of the wave server
# Default value: local.net
wave_server_domain = local.net
# A comma separated list of address on which to listen for connections.
# Each address is a comma separated host:port pair.
# Default value: localhost:9898
http_frontend_public_address = 10.10.103.10:9898
# A optional host:port address on which to listen for websocket connections.
# If no value is set for http_websocket_public_address it defaults to the first
address specified
# by http_frontend_public_address.
# Default value: localhost:9898
http_websocket_public_address = 10.10.103.10:9898
# An optional host:port address for which the client is told to attempt
websocket connections.
# If no value is set for http_websocket_presented_address it defaults to
http_websocket_public_address
# Default value: localhost:9898
http_websocket_presented_address = 10.10.103.10:9898
# Default value: values passed to http_frontend_public_address.
http_frontend_addresses = 10.10.103.10:9898
# A comma separated list of webApp source directories
# Default value: ./war
resource_bases = ./war
### Server-specific variables
###
# Settings for the different persistence stores. Currently supported: memory,
file, mongodb
# Default value: memory
signer_info_store_type = file
# The location where signer info certificate data is stored on disk. This
should be changed.
# Note: This is only used when using the file signer info store. It is ignored
# for other data store types.
# Default value: _certificates
signer_info_store_directory = _certificates
# Currently supported attachment types: mongodb, disk
# Default value: disk
attachment_store_type = disk
# The location where attachments are stored on disk. This should be changed.
# Note: This is only used when using the disk attachment store. It is ignored
# for other data store types.
attachment_store_directory = _attachments
# Currently supported account store types: fake, memory, file, mongodb
# Default value: memory
account_store_type = file
# The location where accounts are stored on disk. This should be changed.
# Note: This is only used when using the file account store. It is ignored
# for other data store types.
# Default value: _accounts
account_store_directory = _accounts
# Currently supported delta store types: memory, file
# Note: file system support is experimental. Your server may crash. And the
file format is
# not stable and shouldn't be relied upon for long-term storage yet; upcoming
changes will
# require you to blow away your data.
# Default value: memory
delta_store_type = file
# The location where deltas are stored on disk. This should be changed.
# Note: This is only used when using the file delta store. It is ignored
# for other data store types.
# Default value: _deltas
delta_store_directory = _deltas
# The location where user sessions are persisted on disk. This allow to restore
user sessions
# between restarts.
# Default value: _sessions
sessions_store_directory = _sessions
# The time in ms that the websocket connection can be idle before closing
# Default value: 0
websocket_max_idle_time = 0
# Maximum websocket message size to be received in MB
# Default value: 2
websocket_max_message_size = 2
# Note: the default value for admin is an invalid user id that cannot be
registered.
# To become an admin: Register a user and set its address as the value below.
# Admin has a privilege to change passwords of other users using an agent robot.
# Default value: @${wave_server_domain}
admin_user = @local.net
# The wave id of the welcome template wave. (Without domain, for example:
w+Fxjs_-ZPmmA).
# If filled in then a copy of this wave (actually only the root blip) will be
# automatically added to the inbox of every new user.
# Default value: "" (empty)
welcome_wave_id =
# The number of threads to listen on wavelet updates. Default value: 1
listener_executor_thread_count = 1
# The number of threads for loading wavelets. Default value: 1
wavelet_load_executor_thread_count = 1
# The number of threads to persist deltas. Default value: 1
delta_persist_executor_thread_count = 1
# The number of threads to perform post wavelet loading logic. Default value: 1
storage_continuation_executor_thread_count = 1
# The number of threads for looking up the wavelet ids
# while creating a list of all wavelets in the persistent storage. Default
value: 1
lookup_executor_thread_count = 1
# To enable federation, edit the server.federation.config file and include it
here.
# Or run ant -f server-config.xml server-federation-config
# If not using the server-config.xml ant script - it is possible just to
comment the line.
include = server.federation.config
# These two parameters MUST appear in this file AFTER the above include of the
# federation config file. This is necesary so that the federation config file
# can override these two values.
# Set true to disable the verification of signed deltas
waveserver_disable_verification = true
# Set true to disable the verification of signers (certificates)
waveserver_disable_signer_verification = true
# Set true to prevent anyone registering on your server.
# When true, only the admin user can use the RegistrationRobot to add new
accounts
# Default value: false
disable_registration = false
# Enable SSL for all address/port combinations listed (makes the next 2
settings non-optional).
# Default value: false
enable_ssl = false
# Path to keystore containg the ssl certificates to server
# Note: this is only used when enable_ssl set to true.
ssl_keystore_path = wiab.ks
# Password to the keystore.
# Note: this is only used when enable_ssl set to true.
ssl_keystore_password = changeme
# Enable client x509 cert. authentication?
enable_clientauth = false
# Domain of the email to look for as email field of x509 client auth
certificates when using client authentication
clientauth_cert_domain =
# Disable login page to force x509-only authentication
disable_loginpage = false
# Currently supported search types: memory, lucene.
# Default value: lucene.
search_type = lucene
# The location where search indexes are stored on disk.
# Note: This is only used when using the lucene search type. It is ignored
# for other search types.
# Default value: _indexes
index_directory = _indexes
# Google Analytics account.
# Default value: empty
analytics_account =
# Directory that holds the thumbnails for attachments.
# Icon must be in PNG format, and named as MIME type with replacing '/' to '_'.
# For example thumbnail file for ZIP format (MIME type application/zip) must be
named application_zip.
thumbnail_patterns_directory = thumbnail_patterns
I will post a screencast ASAP.
> Delta File Storage Crashes WIAB
> -------------------------------
>
> Key: WAVE-393
> URL: https://issues.apache.org/jira/browse/WAVE-393
> Project: Wave
> Issue Type: Bug
> Components: Server
> Reporter: John Darret Steward
> Assignee: Yuri Zelikov
> Priority: Critical
>
> I've been trying to run a WIAB server using delta_store_type = file so as to
> persist waves on the filesystem. However, this causes the following error to
> be thrown whenever a wave is subject to active, heavy concurrent edition by
> at least two users:
> com.google.gxp.compiler.io.RuntimeIOException: java.io.IOException: Delta
> header invalid
> at
> org.waveprotocol.box.server.waveserver.DeltaStoreBasedWaveletState.getTransformedDeltaHistory(DeltaStoreBasedWaveletState.java:374)
> at
> org.waveprotocol.box.server.waveserver.WaveletContainerImpl.transformSubmittedDelta(WaveletContainerImpl.java:374)
> at
> org.waveprotocol.box.server.waveserver.WaveletContainerImpl.maybeTransformSubmittedDelta(WaveletContainerImpl.java:359)
> at
> org.waveprotocol.box.server.waveserver.LocalWaveletContainerImpl.transformAndApplyLocalDelta(LocalWaveletContainerImpl.java:140)
> at
> org.waveprotocol.box.server.waveserver.LocalWaveletContainerImpl.submitRequest(LocalWaveletContainerImpl.java:98)
> at
> org.waveprotocol.box.server.waveserver.WaveServerImpl.submitDelta(WaveServerImpl.java:553)
> at
> org.waveprotocol.box.server.waveserver.WaveServerImpl.submitRequest(WaveServerImpl.java:355)
> at
> org.waveprotocol.box.server.frontend.ClientFrontendImpl.submitRequest(ClientFrontendImpl.java:194)
> at
> org.waveprotocol.box.server.frontend.WaveClientRpcImpl.submit(WaveClientRpcImpl.java:166)
> at
> org.waveprotocol.box.common.comms.WaveClientRpc$ProtocolWaveClientRpc$1.submit(WaveClientRpc.java:4478)
> at
> org.waveprotocol.box.common.comms.WaveClientRpc$ProtocolWaveClientRpc.callMethod(WaveClientRpc.java:4608)
> at
> org.waveprotocol.box.server.rpc.ServerRpcControllerImpl.run(ServerRpcControllerImpl.java:202)
> at
> java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:895)
> at
> java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:918)
> at java.lang.Thread.run(Thread.java:680)
> Caused by: java.io.IOException: Delta header invalid
> at
> org.waveprotocol.box.server.persistence.file.FileDeltaCollection.readDeltaHeader(FileDeltaCollection.java:451)
> at
> org.waveprotocol.box.server.persistence.file.FileDeltaCollection.readRecord(FileDeltaCollection.java:406)
> at
> org.waveprotocol.box.server.persistence.file.FileDeltaCollection.getDelta(FileDeltaCollection.java:189)
> at
> org.waveprotocol.box.server.waveserver.DeltaStoreBasedWaveletState.getDelta(DeltaStoreBasedWaveletState.java:169)
> at
> org.waveprotocol.box.server.waveserver.DeltaStoreBasedWaveletState.readDeltasInRange(DeltaStoreBasedWaveletState.java:147)
> at
> org.waveprotocol.box.server.waveserver.DeltaStoreBasedWaveletState.getTransformedDeltaHistory(DeltaStoreBasedWaveletState.java:366)
> ... 14 more
> After a while trying to debug this I found it originates because, at some
> point, the server will try to read a past version of the wave from the
> persistence file using an erroneous or corrupted position in the file as an
> index. This occurs almost "randomly" halfway through the editing process, and
> can be easily reproduced by having two users opening and editing the same
> wave actively using the WIAB client.
--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see: http://www.atlassian.com/software/jira