[ 
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

Reply via email to