conductor-oss/conductor · error · UnsupportedOperationException

This method is not implemented in CassandraPollDataDAO. Plea

Error message

This method is not implemented in CassandraPollDataDAO. Please use ExecutionDAOFacade instead.

What it means

CassandraPollDataDAO is an explicit stub: it throws UnsupportedOperationException for updateLastPollData because poll-data persistence is intentionally not implemented for the Cassandra backend. The message directs callers to ExecutionDAOFacade, which is the supported entry point for poll data when running on Cassandra.

Source

Thrown at cassandra-persistence/src/main/java/com/netflix/conductor/cassandra/dao/CassandraPollDataDAO.java:28

 * 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.
 */
package com.netflix.conductor.cassandra.dao;

import java.util.List;

import com.netflix.conductor.common.metadata.tasks.PollData;
import com.netflix.conductor.dao.PollDataDAO;

/**
 * This is a dummy implementation and this feature is not implemented for Cassandra backed
 * Conductor.
 */
public class CassandraPollDataDAO implements PollDataDAO {

    @Override
    public void updateLastPollData(String taskDefName, String domain, String workerId) {
        throw new UnsupportedOperationException(
                "This method is not implemented in CassandraPollDataDAO. Please use ExecutionDAOFacade instead.");
    }

    @Override
    public PollData getPollData(String taskDefName, String domain) {
        throw new UnsupportedOperationException(
                "This method is not implemented in CassandraPollDataDAO. Please use ExecutionDAOFacade instead.");
    }

    @Override
    public List<PollData> getPollData(String taskDefName) {
        throw new UnsupportedOperationException(
                "This method is not implemented in CassandraPollDataDAO. Please use ExecutionDAOFacade instead.");
    }
}

View on GitHub (pinned to cf7c3e4a8a)

Solutions

  1. Use ExecutionDAOFacade.updateLastPollData(...) instead of calling the DAO directly.
  2. If persistent poll data is a hard requirement, switch to a backend that implements PollDataDAO (redis/postgres).
  3. Otherwise, treat poll data as unsupported on Cassandra and remove the direct DAO call.

Example fix

// before: direct DAO call - throws on Cassandra
pollDataDAO.updateLastPollData(taskDefName, domain, workerId);

// after: go through the facade
executionDAOFacade.updateLastPollData(taskDefName, domain, workerId);
Defensive patterns

Strategy: fallback

Validate before calling

// Detect the Cassandra stub before calling, and route through the facade
if (pollDataDAO instanceof CassandraPollDataDAO) {
    executionDAOFacade.updateLastPollData(taskDefName, domain, workerId);
} else {
    pollDataDAO.updateLastPollData(taskDefName, domain, workerId);
}

Try / catch

// Fall back to the facade when the DAO is unsupported
try {
    pollDataDAO.updateLastPollData(taskDefName, domain, workerId);
} catch (UnsupportedOperationException e) {
    executionDAOFacade.updateLastPollData(taskDefName, domain, workerId);
}

Prevention

When it happens

Trigger: Code calls pollDataDAO.updateLastPollData(taskDefName, domain, workerId) directly on the injected PollDataDAO bean while Cassandra is the active persistence backend.

Common situations: Porting custom instrumentation or worker logic from the Redis/Postgres backend (which implement PollDataDAO) to Cassandra; injecting PollDataDAO directly instead of using ExecutionDAOFacade.

Related errors


AI-assisted analysis of conductor-oss/conductor@cf7c3e4a8a (2026-08-14). Data as JSON: /api/errors/567c84a7e5f438a6. Report an issue: GitHub.